R-以相同方式格式化两个不同的列表

时间:2018-08-22 10:00:12

标签: r list

我还是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

1 个答案:

答案 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