【问题标题】:passing a list argument to llply将列表参数传递给 llply
【发布时间】: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。有没有办法解决这个问题?

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

更新:我打算把它变成mclapply 以便在集群上运行它。我不能用mapply 做到这一点(除非有mcmapply)。

【问题讨论】:

  • 事实证明,R 2.15.0 中有一个 mcmapply。是时候升级了...?

标签: r plyr lapply


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多