varias superponer studio modificar lineas graficos graficas ejes r list null

superponer - ¿Asignar NULL a un elemento de lista en R?



superponer graficas en r (3)

Buena pregunta.

Consulte las R-FAQ :

En R, si x es una lista, entonces x [i] <- NULL yx [[i]] <- NULL eliminan los elementos especificados de x. El primero de ellos es incompatible con S, donde es un no-op. (Tenga en cuenta que puede establecer elementos en NULL utilizando x [i] <- list (NULL)).

considere el siguiente ejemplo:

> t <- list(1,2,3,4) > t[[3]] <- NULL # removing 3''d element (with following shifting) > t[2] <- list(NULL) # setting 2''d element to NULL. > t [[1]] [2] 1 [[2]] NULL [[3]] [3] 4

ACTUALIZAR:

Como comentó el autor del R Inferno , puede haber situaciones más sutiles cuando se trata de NULL. Considera una estructura bastante general de código:

# x is some list(), now we want to process it. > for (i in 1:n) x[[i]] <- some_function(...)

Ahora tenga en cuenta que si some_function() devuelve NULL , quizás no obtenga lo que desea: algunos elementos simplemente desaparecerán . deberías usar la función lapply . Eche un vistazo a este ejemplo de juguete:

> initial <- list(1,2,3,4) > processed_by_for <- list(0,0,0,0) > processed_by_lapply <- list(0,0,0,0) > toy_function <- function(x) {if (x%%2==0) return(x) else return(NULL)} > for (i in 1:4) processed_by_for[[i]] <- toy_function(initial[[i]]) > processed_by_lapply <- lapply(initial, toy_function) > processed_by_for [[1]] [1] 0 [[2]] [1] 2 [[3]] NULL [[4]] [1] 4 > processed_by_lapply [[1]] NULL [[2]] [1] 2 [[3]] NULL [[4]] [1] 4

Encontré este comportamiento extraño y quería que los usuarios más experimentados compartieran sus ideas y soluciones. Al ejecutar el ejemplo de código a continuación en R:

sampleList <- list() d<- data.frame(x1 = letters[1:10], x2 = 1:10, stringsAsFactors = FALSE) for(i in 1:nrow(d)) { sampleList[[i]] <- d$x1[i] } print(sampleList[[1]]) #[1] "a" print(sampleList[[2]]) #[1] "b" print(sampleList[[3]]) #[1] "c" print(length(sampleList)) #[1] 10 sampleList[[2]] <- NULL print(length(sampleList)) #[1] 9 print(sampleList[[2]]) #[1] "c" print(sampleList[[3]]) #[1] "d"

Los elementos de la lista se desplazan hacia arriba. Tal vez esto es como se esperaba, pero estoy tratando de implementar una función en la que fusiono dos elementos de una lista y coloco uno. Básicamente quiero perder ese índice de lista o tenerlo como NULL.

¿Hay alguna manera de asignarle NULL y no ver el comportamiento anterior?

Gracias por tus sugerencias.


Tu pregunta es un poco confusa para mí.

Asignar nulo a un objeto existente elimina esencialmente ese objeto (esto puede ser muy útil, por ejemplo, si tiene un marco de datos y desea eliminar columnas específicas). Eso es lo que has hecho. Sin embargo, no puedo determinar qué es lo que quieres. Tu podrías intentar

sampleList[[2]] <- NA

en lugar de NULL, pero si por "Quiero perder" te refieres a eliminarlo, entonces ya has tenido éxito. Es por eso que "los elementos de la lista se cambian".


obj = list(x = "Some Value") obj = c(obj,list(y=NULL)) #ADDING NEW VALUE obj[''x''] = list(NULL) #SETTING EXISTING VALUE obj