Я думаю, что вы ищете оператора :=
(см. ?':='
). Ниже приведен краткий пример и сравнение с функцией 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,] дает общую сумму по всем элементам. Не работает со средним значением. –
http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table не обобщает ни на какую функцию (среднее значение). –
@ danas.zuokas: Хорошие очки. В таких случаях я предполагаю, что вы просто используете функции 'row ...', например. 'rowSums (DT [, list (B, C)]), но я думаю, что лучше оставить вопрос открытым. –