es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

You must provide the original sentence or text you want to be translated into Spanish in order for me to accurately translate it for you.

Tengo un vector de valores:

y=c(2,3,4,4,3,2,1,1)

Y una lista de vectores de posiciones:

l=list(c(1,2),c(2,3),c(3,4),c(4,5),c(5,6),c(6,7),c(7,8),c(8,1))

Me gustaría reemplazar el valor de y por NAs (u otros) para cada uno de los elementos en la lista l.

El resultado esperado es una lista de longitud length(l):

[[1]]
[1] NA NA  4  4  3  2  1  1

[[2]]
[1]  2 NA NA  4  3  2  1  1

[[3]]
[1]  2  3 NA NA  3  2  1  1

[[4]]
[1]  2  3  4 NA NA  2  1  1

[[5]]
[1]  2  3  4  4 NA NA  1  1

[[6]]
[1]  2  3  4  4  3 NA NA  1

[[7]]
[1]  2  3  4  4  3  2 NA NA

[[8]]
[1] NA  3  4  4  3  2  1 NA

Se prefieren soluciones en R base.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Podemos usar un bucle for para recorrer cada vector en la lista l y reemplazar los valores correspondientes en y con NA. Podemos almacenar la salida en una nueva lista.

    output <- list()
    for(i in seq_along(l)) {
      replaced_y <- replace(y, l[[i]], NA)
      output[[i]] <- replaced_y
    }
    output
    

    Esto debería dar la salida esperada:

    [[1]]
    [1] NA NA  4  4  3  2  1  1
    
    [[2]]
    [1]  2 NA NA  4  3  2  1  1
    
    [[3]]
    [1]  2  3 NA NA  3  2  1  1
    
    [[4]]
    [1]  2  3  4 NA NA  2  1  1
    
    [[5]]
    [1]  2  3  4  4 NA NA  1  1
    
    [[6]]
    [1]  2  3  4  4  3 NA NA  1
    
    [[7]]
    [1]  2  3  4  4  3  2 NA NA
    
    [[8]]
    [1] NA  3  4  4  3  2  1 NA
    

    Alternativamente, podemos usar lapply para aplicar la función de reemplazo a cada elemento de la lista l.

    output <- lapply(l, function(x) replace(y, x, NA))
    output
    

    Esto da el mismo resultado que el bucle for.

Comments are closed.