1

这就是我想要做的

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

4

1 回答 1

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可以让您具体了解您期望的输出形式(这里是一个与输入“向量”长度相同的逻辑向量)。这使得它比sapply检查值是否可以简化为数组(使用恰当命名的simplify2array函数)更有效。

于 2014-07-07T10:06:14.330 回答