x[] <- lapply(...)
Estos días he aprendido una expresión muy compacta para operar sobre las columnas de una tabla en R:
x <- iris # por ejemplo
x[] <- lapply(x, function(x) factor(x)) # o cualquier otra función
Aunque lapply
debería devolver (y, de hecho, devuelve) una lista, esos corchetes de x
fuerzan de una manera contraintuitiva que la salida final sea una tabla.
La magia es consecuencia de que [<-
es una función en sí misma (puedes consultar help("[<-")
si quieres) con un comportamiento que es el que es (porque sí, a veces las cosas son simplemente como son).
La razón, que no la justificación, de por qué es así está en la definición de esa función, pero
`[<-`
devuelve
.Primitive("[<-")
y no estoy para encontrar el if
por el que se resuelve la expresión anterior en el código fuente de R. El resultado, en cualquier caso, es el anunciado y no otro. Y la expresión, aunque, de nuevo, contraintuitiva, no deja de ser útil.