2012-03-05 5 views
6

Recientemente encontré el paquete data.table. Todavía no estoy seguro de cómo hacer operaciones de matriz en filas. ¿Estaba destinado originalmente para manejar tales operaciones? Por ejemplo, ¿qué sería data.table equivalente a apply(M,1,fun)?Operaciones matriciales en filas en R

fun debe tomar un vector como argumento, por ejemplo mean, median o mad.

Respuesta

4

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.

+0

tmp <- DT [, D: = suma (B, C)]; tmp [1: 2,] da la suma total de todos los elementos. No funciona con la media –

+0

http://stackoverflow.com/questions/7885147/efficient-row-wise-operations-on-a-data-table no se generaliza a ninguna función (media). –

+0

@ 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. –

Cuestiones relacionadas