我正在運行一個模擬程序,我需要跟蹤特定條件的函數調用中出現的次數。我試圖通過賦值給一個全局對象來完成這個任務。它可以運行,如果你運行的功能,但如果你試着lapply
功能,我正在做的那麼你得到的條件發生的所有時間單次計數,而不是每次發生的list
饋送給每個元素的計數lapply
。計數條件在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 2012-08-07 15:41:27
@Andrie,感謝評論(+1),當我開始輸入問題時,我無法想象如何去做,因爲我沒有考慮它是如何返回列表中的'count.occurances'但是當它發生在我身上時已經打出了問題。無論如何,我認爲全球任務的成本很高,而且有更好的方法可以做到。 – 2012-08-07 16:08:42
如果這是我能做的最好的,我將刪除編輯到我的問題,並將其添加爲答案。 – 2012-08-07 16:09:12