在两个列表上应用 outer()

yli*_*gle 4 r outer-join

我有一个清单,比如说exm = list( elm1=c('a', 'b'), elm2=c('b', 'c', 'd'), elm3=c('b', 'c', 'd', 'e'))。我想对来自 的两个元素的每个组合应用一个函数exm,例如,length( intersect( exm$elm1, exm$elm2 ) )。结果应该是一个对称矩阵。该函数outer似乎可以完成这项工作,但它仅适用于向量,而不适用于列表。有什么想法可以这样做吗?

Mif*_*iff 5

以下情况如何:

exm = list( elm1=c('a', 'b'), elm2=c('b', 'c', 'd'), elm3=c('b', 'c', 'd', 'e'))
#Use mapply to vectorise your function
int2 <- function(x,y) mapply(function(x,y) {length( intersect( x, y ) )},
                             exm[x], exm[y])

#Use outer on the indices of exm, rather than exm itself
s <- seq_along(exm)
outer(s,s,int2)

#      [,1] [,2] [,3]
# [1,]    2    1    1
# [2,]    1    3    3
# [3,]    1    3    4
Run Code Online (Sandbox Code Playgroud)