R نوع دادهای جداگانه به اسم «مجموعه» ندارد و بهجای آن، از توابع گوناگونی برای انجام عملیات مشابه روی بردارها استفاده میکند.
عملگر %in% عضویت در مجموعه را بررسی میکند.
2 %in% 1:10 # TRUE
12 %in% 1:10 # FALSE
توابع مرتبط عبارتاند از unique (برای حذف مقادیر تکراری)، بهعلاوهی union()، intersect()، setdiff() و setequal() که روی جفتهای مجموعه کار میکنند.
> set_1 <- c("a", "b", "c", "b", "a")
> unique(set_1) # deduplicate
[1] "a" "b" "c"
> set_2 <- c('a', "c", "d")
> union(set_1, set_2) # values in either set
[1] "a" "b" "c" "d"
> intersect(set_1, set_2) # values in both sets
[1] "a" "c"
> setdiff(set_1, set_2) # values in set_1 but not set_2
[1] "b"
> setdiff(set_2, set_1) # values in set_2 but not set_1
[1] "d"
setequal(set_1, c("c", "b", "a", "b")) # are elements the same after deduplication?
[1] TRUE
در هر حالت، set_1 و set_2 بدون تغییر میمانند.
Ozan دارد برای یک سفر جادهای پیشرو یک لیست پخش آماده میکند. او نمیخواهد یک آهنگ را بیش از یک بار بشنود، اما لیست پخش آنقدر طولانی شده که در یادآوری آهنگهایی که قبلاً اضافه شدهاند مشکل دارد.
API پخشکنندهی موسیقی Ozan فقط با «بردار»ها کار میکند. نمیتوان از «حلقه»های صریح یا منطق if/else استفاده کرد. او به کمک شما نیاز دارد!
تابع remove_duplicates را پیادهسازی کنید؛ این تابع یک لیست پخش را به عنوان پارامتر میگیرد و یک لیست پخش تازه برمیگرداند که در آن همهی آهنگها یکتا هستند.
> playlist <- c(
"Court and Spark - Joni Mitchell",
"Big Yellow Taxi - Joni Mitchell",
"Court and Spark - Joni Mitchell"
)
> remove_duplicates(playlist)
[1] "Court and Spark - Joni Mitchell" "Big Yellow Taxi - Joni Mitchell"
تابع has_track را پیادهسازی کنید؛ این تابع یک لیست پخش و یک آهنگ را به عنوان پارامتر میگیرد و یک «مقدار منطقی» برمیگرداند که نشان میدهد لیست پخش آن آهنگ را در خود دارد یا نه.
> playlist <- c(
"The Fashion Show - Grace Jones",
"Dr. Funkenstein - Parliament"
)
> has_track(playlist, "Dr. Funkenstein - Parliament")
[1] TRUE
> has_track(playlist, "Walking in the Rain - Grace Jones")
[1] FALSE
تابع add_tracks را پیادهسازی کنید؛ این تابع یک لیست پخش و یک بردار شامل یک یا چند آهنگ را به عنوان پارامتر میگیرد و یک لیست پخش تازه برمیگرداند که آن آهنگها را در خود دارد.
> playlist <- c("Selma - Bijelo Dugme")
> playlist <- add_tracks(playlist, "Atomic Dog - George Clinton")
> playlist
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton"
> add_tracks(playlist, "Selma - Bijelo Dugme")
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton"
> add_tracks(playlist, c("The Chain - Fleetwood Mac", "Selma - Bijelo Dugme"))
[1] "Selma - Bijelo Dugme" "Atomic Dog - George Clinton" "The Chain - Fleetwood Mac"
تابع delete_tracks را پیادهسازی کنید؛ این تابع یک لیست پخش و یک یا چند آهنگ را به عنوان پارامتر میگیرد و یک لیست پخش تازه برمیگرداند که آن آهنگها را در خود ندارد.
> playlist <- c(
"The Treasure - Fra Lippo Lippi",
"After the Fall - Klaus Nomi"
)
> playlist <- delete_tracks(playlist, "The Treasure - Fra Lippo Lippi")
> playlist
[1] "After the Fall - Klaus Nomi"
> delete_tracks(playlist, "I Feel the Magic - Belinda Carlisle")
[1] "After the Fall - Klaus Nomi"
Ozan با دوست تازهای آشنا میشود و کنجکاو است بداند سلیقهشان چقدر شبیه هم است.
تابع find_common_tracks را پیادهسازی کنید؛ این تابع دو لیست پخش میگیرد و یک لیست پخش تازه برمیگرداند که فقط آهنگهای مشترک در هر دو را در خود دارد.
> playlist_1 <- c("Karma - Taylor Swift", "Tired - Adele")
> playlist_2 <- c("Andromeda - Weyes Blood", "Karma - Taylor Swift")
> find_common_tracks(playlist_1, playlist_2)
[1] "Karma - Taylor Swift"