计算基于另一个列表的列表中的元素

时间:2013-05-22 00:09:31

标签: r

我有两个列表如下:

mylist <- list(a=c(1:5), 
               b = c(5:12), 
               c = c(2:8))

list.id <- list(a=2, b=8, c=5)

我想计算mylist中高于list.id中相应元素的元素数,并将结果除以mylist中元素的length。我写过这个函数。

perm.fun <- perm.fun2 = function(x,y){length(which(x[[i]] < y[[i]]))/length(x[[i]])}

然而,当我这样做时:lapply(mylist, perm.fun, list.id)我没有获得预期的结果。

由于

1 个答案:

答案 0 :(得分:4)

使用lapply,您需要循环索引(123),以便可以使用它们从{{mylist中提取元素1}}和list.id

perm.fun <- function(i, x, y) mean(x[[i]] > y[[i]])
lapply(seq_along(mylist), perm.fun, mylist, list.id)

mapply是完成该任务的更好工具。来自doc:

  

mapply将FUN应用于每个...参数的第一个元素,第二个元素,第三个元素,依此类推。

所以你的代码可以是:

mapply(function(x, y) mean(x > y), mylist, list.id)
#         a         b         c 
# 0.6000000 0.5000000 0.4285714