假设我有一个列表的部分如下所示:
aaa[[1]]
# [1] "A5-5,73" "B3-4,73" "E3-8,73" "A1-8,73" "C1-7,73" "A1-2,73" "C3-2,73" "C1-1,73"
假设我有另一个列表,其中的部分看起来像这样:
bbb[[1]]
# [1] "B3-4,73" "C3-2,73" "A5-5,73" "A1-8,73" "A1-2,73" "A1-5,73" "B1-1,73" "C1-4,73"
考虑一下我现在正在运行
which(aaa[[1]]!= bbb[[1]])
返回
# [1] 1 2 3 5 6 7 8
这在技术上是正确的,因为[4]
和aaa
bbb
是相同的
我希望返回的内容是:
# [1] "C1-7,73" "A1-2,73" "C1-1,73"
因为这些是aaa
的值,不论位置如何都不在bbb
中。我也愿意提供一个只提供索引号的解决方案,例如:
# [1] 5 6 8
以下是一个可重复的示例:
aaa <- vector("list")
aaa[[1]] <- c("A5-5,73", "B3-4,73", "E3-8,73", "A1-8,73",
"C1-7,73", "A1-2,73", "C3-2,73", "C1-1,73")
bbb <- vector("list")
bbb[[1]] <- c("B3-4,73", "C3-2,73", "A5-5,73", "A1-8,73",
"A1-2,73", "A1-5,73", "B1-1,73", "C1-4,73")
答案 0 :(得分:3)
如果您想将列表aaa
的每个元素与相应的元素bbb
进行比较,只需这样做。
mapply(FUN = setdiff, x = aaa, y = bbb)
写这篇文章的时候,我看到@RichardScriven的评论已经提到了setdiff
。
答案 1 :(得分:2)
正如@Richard Scriven在评论中提到的那样
setdiff(aaa[[1]], bbb[[1]])
是获取元素的方法。当你还要求索引号时,可以使用which()
which(aaa[[1]] %in% setdiff(aaa[[1]], bbb[[1]]))
%in%产生逻辑值,而()告诉它们为何为真。