+1 untuk mengingatkan kami tentang Reducedan kapitalisasi R yang benar!
mariotomo
8
Perlu dicatat bahwa intersectuntuk operasi yang ditetapkan. Jika Anda memiliki elemen berulang di vektor, Anda akan kehilangan info ini karena vektor diubah menjadi set sebelum berpotongan. Misalnya intersect(c(1,1,2,3), c(1,1,3,4))akan menghasilkan c(1,3), dan Anda mungkin menginginkan hasilnya c(1,1,3).
Giora Simchoni
1
@GioraSimchoni bagaimana Anda bisa mendapatkan c (1,1,3), jika itu yang Anda inginkan?
StatsSorceress
@StatsSorceress Misalkan Anda menginginkan "intersection preservate duplikate" dari vektor yang terdiri dari bilangan bulat positif, semuanya ada dalam daftar L. Kode berikut berfungsi: N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))Cara lain untuk melakukan ini akan menggunakan matchfungsi bersama dengan subskrip negatif untuk secara iteratif menghapus dari masing-masing vektor setiap elemen ditambahkan ke "kernel".
Montgomery Clift
24
Jawaban yang bagus sudah, tetapi ada beberapa cara lain untuk melakukan ini:
c
sebagai nama variabel ...c(1,2...)
.Jawaban:
Mungkin ada cara yang lebih pintar untuk melakukan hal ini, tetapi
akan melakukan pekerjaan.
EDIT: Lebih cerdik, dan lebih nyaman jika Anda memiliki banyak argumen:
sumber
Reduce
dan kapitalisasi R yang benar!intersect
untuk operasi yang ditetapkan. Jika Anda memiliki elemen berulang di vektor, Anda akan kehilangan info ini karena vektor diubah menjadi set sebelum berpotongan. Misalnyaintersect(c(1,1,2,3), c(1,1,3,4))
akan menghasilkanc(1,3)
, dan Anda mungkin menginginkan hasilnyac(1,1,3)
.N <- max(unlist(L)); LT <- lapply(L, tabulate, nbins = N); v <- do.call(pmin, LT); unlist(sapply(1:N, function(x) rep(x, v[x])))
Cara lain untuk melakukan ini akan menggunakanmatch
fungsi bersama dengan subskrip negatif untuk secara iteratif menghapus dari masing-masing vektor setiap elemen ditambahkan ke "kernel".Jawaban yang bagus sudah, tetapi ada beberapa cara lain untuk melakukan ini:
atau,
Anda jelas dapat menghilangkan
unique
panggilan jika Anda tahu bahwa tidak ada nilai berulang di dalama
,b
atauc
.sumber
EDIT UPDATE Kode yang lebih sederhana
sumber