2012-03-05 140 views
6

最近我碰到了data.table包。 我還不確定如何進行行式矩陣操作。 最初是打算如何處理這種操作? 例如,什麼data.table相當於apply(M,1,fun)R中的行明智矩陣操作

fun應該帶一個向量作爲參數,例如mean,medianmad

回答

4

我認爲您正在尋找:=運營商(請參閱?':=')。一個簡短的例子和與mapply函數的比較如下(我希望我正確地應用mapply函數;我現在只使用data.tables,所以沒有承諾;但仍然,data.table方法是快速的並且在我的意見很容易記住):

library(data.table) 
> df <-  data.frame(ID = 1:1e6, 
+      B = rnorm(1e6), 
+      C = rnorm(1e6)) 
> system.time(x <- mapply(foo, df$B, df$C)) 
    user system elapsed 
    4.32 0.04 4.38 
> DT <- as.data.table(df) 
> system.time(DT[, D := foo(B, C)]) 
    user system elapsed 
    0.02 0.00 0.02 
> all.equal(x, DT[, D]) 
[1] TRUE 

張貼我的答案後,我不太確定了,如果這是你在找什麼。我希望它能做到,只是給出更多細節(例如,你是否有許多列需要應用函數,而不僅僅是我的例子中的兩個)。無論如何,這SO post可能是你感興趣的。

+0

tmp < - DT [,D:= sum(B,C)]; tmp [1:2,] 給出了所有元素的總和。沒有用的意思。 – 2012-03-05 12:24:31

+0

http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table沒有推廣到任何函數(均值)。 – 2012-03-05 12:31:16

+0

@ danas.zuokas:好點。在這些情況下,我想你只會使用'row ...'函數,例如'rowSums(DT [,list(B,C)])'',但我認爲最好不要打開問題。 – 2012-03-05 12:46:39