R中的常見用例(至少對我而言)是在數據框中標識具有某些取決於某些子集中的值的特徵的觀察值的其他觀察。R中針對「自然」過程問題的有效函數編程(使用mapply)
爲了使這更沈志南,假設我有一批工人(由WorkerId索引)是 具有相應的「迭代」:
raw <- data.frame(WorkerId=c(1,1,1,1,2,2,2,2,3,3,3,3),
Iteration = c(1,2,3,4,1,2,3,4,1,2,3,4))
,我想最終子集的數據幀排除「最後」迭代(通過爲每個工作者創建一個「刪除」布爾值)。我可以寫一個函數來做到這一點:
raw$remove <- mapply(function(wid,iter){
iter==max(raw$Iteration[raw$WorkerId==wid])},
raw$WorkerId, raw$Iteration)
> raw$remove
[1] FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
但得到的數據幀變大很慢(大概是因爲我不必要計算最大爲每個觀察)。
我的問題是在函數式編程風格中做到這一點的更高效(和慣用)的方式是什麼。它是首先創建一個WorkerId到最大值字典,然後將其用作另一個對每個觀察操作的函數的參數?
你的例子是由另一個R-覆蓋問題:[爲指定字段提取具有MAX值的數據幀行的索引](http://stackoverflow.com/q/60 168747分之25051)。 – Marek 2011-05-29 23:08:36