我想将列表中每个成员的每个元素与另一个列表中每个成员的每个元素进行比较。
A = B = list(1, 2, c(1,2))
预期结果如下:
[,1] [,2] [,3]
[1,] TRUE FALSE TRUE
[2,] FALSE TRUE TRUE
[3,] TRUE TRUE TRUE
我可以为data.frame解决类似的任务:
df = data.frame(A = c(1, 2, "1,2"), B = c(1, 2, "1,2"))
sapply(df$A, grepl, df$B)
给出:
[,1] [,2] [,3]
[1,] TRUE FALSE FALSE
[2,] FALSE TRUE FALSE
[3,] TRUE TRUE TRUE
但这并不是我正在寻找的解决方案。
非常感谢您的帮助!
答案 0 :(得分:2)
这是一种复杂的方法:
A = B = list(1, 2, c(1,2))
outer(A, B, function(a,b) sapply((Vectorize(`%in%`))(a,b),any) )
# [,1] [,2] [,3]
#[1,] TRUE FALSE TRUE
#[2,] FALSE TRUE TRUE
#[3,] TRUE TRUE TRUE
这是一个简单的方法:
eg <- expand.grid(A,B)
matrix(
mapply(function(x,y) {any(x %in% y)}, x = eg$Var1, y = eg$Var2 ), nrow = length(A), ncol = length(B)
)
(只是为了好玩:)
matrix(
mapply(function(x,y) {length(intersect(x, y)) != 0}, x = eg$Var1, y = eg$Var2 ), nrow = length(A), ncol = length(B)
)