这个问题我一直没有找到满意的答案。假设我有一个功能:
foo <- function(a,b,c) {
...
}
a
是一个包含许多data.frame
对象的列表
b
是一个包含特殊数据类的列表(如果有帮助,则ppp
来自库的类)。spatstat
c
是一个整数。
我想通过该功能推送一个列表:
result <- llply(a, foo, b,c)
列表项的名称b
对应于 list 中 data.frames 中的“type”列a
。所以内部功能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
。有没有办法解决?
在紧要关头,我可以创建另一个列表(有效地结合a
and b
),其中每个列表项本身就是一个长度为 2 的列表,其中包含data.frame
和对应的点模式对象。但这将导致 1000 多个冗余副本(并使在集群上运行此操作的效率大大降低)。
更新:我打算把它变成一个mclapply
在集群上运行它。我不能这样做mapply
(除非有mcmapply
)。