使用R`outer`和`%in%`运算符

时间:2018-11-26 12:03:15

标签: r

我正在尝试执行以下外部操作:

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

发生了什么事?

2 个答案:

答案 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