我还是R的新手,我正在尝试比较两个列表,以便使用setdiff()获得它们之间的所有差异(list2中没有123和965)。
我如何用相同的方式格式化它们以便能够比较它们?
> list1
$<NA>
[1] "123"
$<NA>
[1] "8"
$<NA>
[1] "965"
$<NA>
[1] "789"
$<NA>
[1] "23"
>list2
V1
1 8
2 22
3 11111
4 789
答案 0 :(得分:1)
Salman是对的,因为您不能盲目地比较列表,因为它们是设计上非常异类的结构。但是,如果您确信两个列表都应该包含数字,并且希望将每个列表视为一个大的未区分大小写的袋子,则可以在执行setdiff()
list1 <- as.list(as.character(c(123, 8, 965, 789, 23)))
names(list1) <- NA
list2 <- data.frame(V1=c(8, 22, 11111, 789))
listdiff <- function(x, y) {
setdiff(as.numeric(unlist(x)), as.numeric(unlist(y)))
}
listdiff(list1, list2)
# [1] 123 965 23