6
最近我碰到了data.table
包。 我還不確定如何進行行式矩陣操作。 最初是打算如何處理這種操作? 例如,什麼data.table相當於apply(M,1,fun)
?R中的行明智矩陣操作
fun
應該帶一個向量作爲參數,例如mean
,median
或mad
。
最近我碰到了data.table
包。 我還不確定如何進行行式矩陣操作。 最初是打算如何處理這種操作? 例如,什麼data.table相當於apply(M,1,fun)
?R中的行明智矩陣操作
fun
應該帶一個向量作爲參數,例如mean
,median
或mad
。
我認爲您正在尋找:=
運營商(請參閱?':='
)。一個簡短的例子和與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可能是你感興趣的。
tmp < - DT [,D:= sum(B,C)]; tmp [1:2,] 給出了所有元素的總和。沒有用的意思。 – 2012-03-05 12:24:31
http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table沒有推廣到任何函數(均值)。 – 2012-03-05 12:31:16
@ danas.zuokas:好點。在這些情況下,我想你只會使用'row ...'函數,例如'rowSums(DT [,list(B,C)])'',但我認爲最好不要打開問題。 – 2012-03-05 12:46:39