将list参数传递给llply

时间:2012-04-05 00:34:24

标签: r plyr lapply

我从来没有找到这个问题的满意答案。假设我有一个功能:

foo <- function(a,b,c) {
...
}

a是一个包含许多data.frame个对象的列表

b是一个包含特殊数据类的列表(来自库ppp的类spatstat,如果有帮助的话)。

c是一个整数。

我希望通过该功能推送列表:

result <- llply(a, foo, b,c) 

b中列表项的名称对应于列表a中data.frames中的“type”列。所以在函数foo内我可以快速做到:

id <- which(names(b) == unique(a$type))
baseline_pattern <- b[[id]]

将b中的每个基础空间模式与a中的右侧data​​.frame匹配。 b中约有10个项目,a中有1000个项目。遗憾的是,这不起作用,因为llply(或一般lapply)尝试在a时间推送一个列表项,即使对于参数列表b和两行与b中的正确列表项匹配的代码与正确的数据帧失败,因为该函数不再具有整个列表b。有没有办法解决这个问题?

在紧要关头,我可以创建另一个列表(有效地组合ab),其中每个列表项本身就是一个长度为2的列表,其中包含data.frame和相应的点模式宾语。但是这将导致1000个冗余副本(并且使得在群集上运行此操作效率低得多)。

更新:我打算将其转换为mclapply以在群集上运行此功能。 mapply我不能这样做(除非有mcmapply)。

1 个答案:

答案 0 :(得分:1)

我还没有完全醒过来,但听起来你想mapply使用MoreArgs=list(b, c)