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