这就是我想要做的事情
List <- list(LETTERS,LETTERS,LETTERS)
Vector <- c("A","B","C","D")
我想知道向量的每个元素是否存在于列表的每个元素中。我尝试了mapply,但只比较了相应的元素。我想要所有组合。
mapply(function(x,y){x %in% y},Vector,List)
A B C D
TRUE TRUE TRUE TRUE
使用mapply输出看起来像这样。我想要的输出是这样的东西
[,1] [,2] [,3]
[1,] TRUE TRUE TRUE
[2,] TRUE TRUE TRUE
[3,] TRUE TRUE TRUE
[4,] TRUE TRUE TRUE
无论如何不使用嵌套的for循环吗?还尝试了函数outer()
,但它不起作用。
答案 0 :(得分:2)
也许以下其中一项更符合您的要求:
sapply(List, function(x) Vector %in% x)
mapply(function(x, y) {x %in% y}, list(Vector), List)
vapply(List, function(x) Vector %in% x, logical(length(Vector)))
所有结果都是:
# [,1] [,2] [,3]
# [1,] TRUE TRUE TRUE
# [2,] TRUE TRUE TRUE
# [3,] TRUE TRUE TRUE
# [4,] TRUE TRUE TRUE
我更喜欢第三个选项,因为vapply
可让您具体了解您期望的输出形式(此处,逻辑向量与输入的长度相同&#34; Vector&#34; )。这使得它比sapply
更有效,它检查值是否可以简化为数组(使用恰当命名的simplify2array
函数)。