我有一个清单,比如说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似乎可以完成这项工作,但它仅适用于向量,而不适用于列表。有什么想法可以这样做吗?
以下情况如何:
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)
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |