我正在尝试执行以下外部操作:
x <- c(1, 11)
choices <- list(1:10, 10:20)
outer(x, choices, FUN=`%in%`)
我期望以下矩阵:
[,1] [,2]
[1,] TRUE FALSE
[2,] FALSE TRUE
对应于以下操作:
outer(x, choices, FUN=paste, sep=" %in% ")
[,1] [,2]
[1,] "1 %in% 1:10" "1 %in% 10:20"
[2,] "11 %in% 1:10" "11 %in% 10:20"
但是由于某种原因,我得到了:
[,1] [,2]
[1,] FALSE FALSE
[2,] FALSE FALSE
发生了什么事?
答案 0 :(得分:3)
如评论中所述,table
的{{1}}自变量(由match
调用的函数)不打算作为列表(如果是,则被强制为一个角色)。您应该使用%in%
:
vapply
答案 1 :(得分:2)
另一种接近您思路的方法是,使用expand.grid()
创建组合,然后通过Map
函数%in%
创建两列,即
d1 <- expand.grid(x, choices)
matrix(mapply(`%in%`, d1$Var1, d1$Var2), nrow = length(x))
#or you can use Map(`%in%`, ...) in order to keep results in a list
OR
如@nicola所建议,为了使事情变得更好,
d1 <- expand.grid(list(x), choices)
mapply(%in%, d1$Var1, d1$Var2)
同时给予,
[,1] [,2] [1,] TRUE FALSE [2,] FALSE TRUE