2013-05-22 41 views
3

我有两个列表看起来像这样:计数元素基于另一个列表上

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)我没有得到预期的结果。

感谢

回答

4

使用lapply,你需要对指数环(123),因此它们可以被用来提取来自mylistlist.id元素:

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

但对于该任务来说,mapply是一个更好的工具。从文档:

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

所以,你的代码可以只是:

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

简单完美!!!! – user2380782

相关问题