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并将结果除以lengthmylist 中的元素。我写了这个函数。

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

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

谢谢

4

1 回答 1

4

使用lapply,您需要循环索引 ( 1, 2, 3) 以便它们可用于从mylist和中提取元素list.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 
于 2013-05-22T00:11:36.450 回答