我有两个列表如下:
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)
我没有获得预期的结果。
由于
答案 0 :(得分:4)
使用lapply
,您需要循环索引(1
,2
,3
),以便可以使用它们从{{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