【发布时间】:2012-08-07 15:14:53
【问题描述】:
我正在运行一个模拟,我需要跟踪特定条件的函数调用中出现的次数。我试图通过分配给全局对象来实现这一点。如果您运行该函数,但如果您尝试lapply 该函数就像我正在做的那样,它会起作用,那么您将获得条件发生的所有时间的单一计数,而不是每次发生在@中的每个元素的计数987654322@ 馈送到lapply。
这是一个虚拟情况,出现的是一个数字的偶数:
FUN <- function(x){
lapply(1:length(x), function(i) {
y <- x[i]
if (y %% 2 == 0){
assign("count.occurrences", count.occurrences + 1, env=.GlobalEnv)
}
print("do something")
})
list(guy="x", count=count.occurrences)
}
#works as expected
count.occurrences <- 0
FUN(1:10)
count.occurrences <- 0
lapply(list(1:10, 1:3, 11:16, 9), FUN)
#gives me...
#> count.occurrences
#[1] 9
#I want...
#> count.occurrences
#[1] 5 1 3 0
这是在模拟中,所以速度是个问题。我希望这尽可能快,这样我就不会接受全球任务的想法。
【问题讨论】:
-
您希望我们改进您的单线解决方案吗?
-
@Andrie,感谢您的评论(+1),当我开始输入问题时,我根本想不出该怎么做,因为我没有考虑它是如何返回的@ 987654325@ 在列表中,但在我想到这个问题时输入了这个问题。无论如何,我认为全球分配的成本很高,并且有更好的方法来做到这一点。
-
如果这是我能做的最好的,我将删除对我的问题的编辑并将其添加为答案。
-
你也可以使用闭包来做到这一点,但我的观点是,如果你有一个简单、有效的解决方案,那就坚持下去。
标签: r