【发布时间】:2012-04-05 00:34:23
【问题描述】:
我从来没有为这个问题找到满意的答案。假设我有一个函数:
foo <- function(a,b,c) {
...
}
a 是一个包含许多 data.frame 对象的列表
b 是一个包含特殊数据类的列表(类 ppp 来自库 spatstat,如果有帮助的话)。
c 是一个整数。
我想通过该函数推送一个列表:
result <- llply(a, foo, b,c)
b 中的列表项名称对应于列表a 中data.frames 中的“类型”列。所以里面函数foo我可以很快做到:
id <- which(names(b) == unique(a$type))
baseline_pattern <- b[[id]]
将 b 中的每个底层空间模式与 a 中的正确 data.frame 匹配。 b 中有大约 10 个项目,a 中有 1000 个项目。不幸的是,这不起作用,因为llply(或一般lapply)试图在a时间推送一个列表项,即使对于参数列表b和与@中正确列表项匹配的两行代码具有正确数据帧的 987654337@ 失败,因为该函数不再具有整个列表 b。有没有办法解决这个问题?
在紧要关头,我可以创建另一个列表(有效地结合a 和b),其中每个列表项本身就是一个长度为2 的列表,其中包含data.frame 和相应的点模式对象。但这会导致 1000 多个冗余副本(并使在集群上运行此操作的效率大大降低)。
更新:我打算把它变成mclapply 以便在集群上运行它。我不能用mapply 做到这一点(除非有mcmapply)。
【问题讨论】:
-
事实证明,R 2.15.0 中有一个
mcmapply。是时候升级了...?