tres simbolos reutilizar reducir reciclar reciclaje para niños las importancia ejemplos r syntax functional-programming

simbolos - reducir reutilizar y reciclar



Funciones de reciclaje y asignación(`split<-`) (2)

Gracias al comentario, la respuesta está en split<-.default

Solo para explicar su comportamiento, aquí llamo a la split<-.default con el resultado de mi llamada en la pregunta

`split<-.default` <- function(dat, f,value = lapply(split(dat, f), max)) { ix <- split(seq_along(dat), f, drop = drop, ...) ## the call of split here!! n <- length(value) j <- 0 for (i in ix) { j <- j %% n + 1 x[i] <- value[[j]] ## here we assign the result of the first split } x }

¿Puede alguien explicarme cómo funciona esta línea de código R?

split(dat, f) <- lapply(split(dat, f), max)

Pensé que es solo una regla de reciclaje pero realmente no puedo entenderlo.

Ejemplo de datos:

dat <- c(1, 2, 3, 100, 200, 300) f <- as.factor(c("a", "a", "b", "a", "b", "b")) split(dat, f) <- lapply(split(dat, f), max) dat [1] 100 100 300 100 300 300

¿El código hace lo que quiero hacer (asignar el máximo por grupo) pero la pregunta es cómo se hace esto?


La división da los valores dat[c(1,2,4)] y dat[c(3,5,6)] del vector.

La asignación es equivalente a dat[c(1,2,4)] <- 100 ; dat[c(3,5,6)] <- 300 dat[c(1,2,4)] <- 100 ; dat[c(3,5,6)] <- 300 y aquí es donde tiene lugar el reciclaje.

Editado

En cuanto a lo que sucede y por qué resulta una asignación de vectores, consulte la página 21 del manual de definición de idioma (http://cran.r-project.org/doc/manuals/R-lang.pdf). La llamada:

split(def, f) <- Z

Se interpreta como:

‘*tmp*‘ <- def def <- "split<-"(‘*tmp*‘, f, value=Z) rm(‘*tmp*‘)

Tenga en cuenta que split<-.default devuelve el vector modificado.