+1 за напоминание о Reduceправильной и заглавной букве R!
Мариотомо
8
Стоит отметить, что intersectэто для заданных операций. Если у вас есть элементы, повторяющиеся в векторах, вы потеряете эту информацию, потому что векторы преобразуются в наборы до пересечения. Например intersect(c(1,1,2,3), c(1,1,3,4)), результат c(1,3), и вы, возможно, хотели получить результат c(1,1,3).
Гиора Симчони
1
@GioraSimchoni как вы могли бы получить C (1,1,3), если это действительно то, что вы хотите?
StatsSorceress
@StatsSorceress Предположим, что вы хотите «дубликаты, сохраняющие пересечение» векторов, состоящих из положительных целых чисел, все в списке L. Работает следующий код: еще 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])))один способ сделать это - использовать matchфункцию вместе с отрицательной подпиской для итеративного удаления из каждого из векторов. каждый элемент добавляется в «ядро».
Монтгомери Клифт
24
Хороший ответ уже есть, но есть несколько других способов сделать это:
c
качестве имени переменной ...c(1,2...)
.Ответы:
Там может быть более умный способ сделать это, но
сделаю работу.
РЕДАКТИРОВАТЬ: более умно и удобнее, если у вас много аргументов:
источник
Reduce
правильной и заглавной букве R!intersect
это для заданных операций. Если у вас есть элементы, повторяющиеся в векторах, вы потеряете эту информацию, потому что векторы преобразуются в наборы до пересечения. Напримерintersect(c(1,1,2,3), c(1,1,3,4))
, результатc(1,3)
, и вы, возможно, хотели получить результатc(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])))
один способ сделать это - использоватьmatch
функцию вместе с отрицательной подпиской для итеративного удаления из каждого из векторов. каждый элемент добавляется в «ядро».Хороший ответ уже есть, но есть несколько других способов сделать это:
или,
Очевидно, что вы можете пропустить
unique
вызовы, если знаете, что в них нет повторяющихся значенийa
,b
илиc
.источник
ОБНОВЛЕНИЕ РЕДАКТИРОВАТЬ Более простой код
источник