将向量中的所有元素与不带for循环的列表的所有元素进行比较

时间:2014-07-07 10:03:00

标签: r apply lapply mapply

这就是我想要做的事情

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(),但它不起作用。

1 个答案:

答案 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函数)。