dplyr
s setdiff
работает с фреймами данных, я бы предложил
library(dplyr)
nrow(setdiff(a, c)) == 0 & nrow(setdiff(c, a)) == 0
# [1] TRUE
Обратите внимание, что не учитывает количество повторяющихся строк . (то есть, если a
имеет несколько копий строки, а c
имеет только одну копию этой строки, он все равно вернет TRUE
). Не уверен, как вы хотите обрабатывать дублирующиеся строки ...
Если вам важно иметь одинаковое количество дубликатов, я бы предложил две возможности: (а) добавить столбец идентификаторов для дифференциации дубликатов и использовать описанный выше подход, или (б) сортировку, сброс имен строк ( досадно) и используя identical
.
(a) добавление столбца идентификатора
library(dplyr)
a_id = group_by_all(a) %>% mutate(id = row_number())
c_id = group_by_all(c) %>% mutate(id = row_number())
nrow(setdiff(a_id, c_id)) == 0 & nrow(setdiff(c_id, a_id)) == 0
# [1] TRUE
(б) сортировка
a_sort = a[do.call(order, a), ]
row.names(a_sort) = NULL
c_sort = c[do.call(order, c), ]
row.names(c_sort) = NULL
identical(a_sort, c_sort)
# [1] TRUE