Creo que está buscando el operador :=
(vea ?':='
). A continuación se muestra un breve ejemplo y una comparación con la función mapply
(espero aplicar la función mapply
correctamente; solo estoy usando data.tables hoy en día, así que no hay ninguna promesa al respecto, pero aún así, la forma data.table es rápida y en mi opinión fácil de memorizar):
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
Después de publicar mi respuesta, no estoy tan seguro si esto es lo que busca. Espero que sí, solo brinde más detalles si no lo hace (por ejemplo, ¿tiene muchas columnas a las que desea aplicar una función, no solo las dos en mi ejemplo?). De todos modos, este SO post podría ser de su interés.
tmp <- DT [, D: = suma (B, C)]; tmp [1: 2,] da la suma total de todos los elementos. No funciona con la media –
http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table no se generaliza a ninguna función (media). –
@ danas.zuokas: buenos puntos. En esos casos, supongo que solo usaría las funciones 'row ...', p. 'rowSums (DT [, list (B, C)])', pero creo que es mejor dejar la pregunta abierta. –