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.

Nombre del segundo nivel de lista anidada en R

Tengo una lista anidada similar a la siguiente simulada:

Lista1 <- lista (1:3, 4:7, 8:10)
Lista2 <- lista (2:5, 4:9, 19:23, 15:18)
Lista3 <- lista (1:5)

Lista_anidada <- lista (Lista1, Lista2, Lista3)
nombres (Lista_anidada) <- c ("primero", "segundo", "tercero")

El primer nivel tiene nombre, mientras que el segundo nivel no. Me gustaría asignar nombres al segundo nivel de la lista basándome en los nombres del primer nivel y los índices de posición, para que la estructura de esta lista se vea así:

Lista de 3
$ primero: Lista de 3
.. $ primero_1: int [1:3] 1 2 3
.. $ primero_2: int [1:4] 4 5 6 7
.. $ primero_3: int [1:3] 8 9 10
$ segundo: Lista de 4
.. $ segundo_1: int [1:4] 2 3 4 5
.. $ segundo_2: int [1:6] 4 5 6 7 8 9
.. $ segundo_3: int [1:5] 19 20 21 22 23
.. $ segundo_4: int [1:4] 15 16 17 18
$ tercero: Lista de 1
.. $ tercero_1: int [1:5] 1 2 3 4 5

¿Alguien sabe cómo resolver esto? Agradecería ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asignar nombres al segundo nivel de la lista anidada basándonos en los nombres y posiciones del primer nivel, podemos utilizar una combinación de la función lapply y la función paste.

    Aquí está el enfoque paso a paso:

    1. Recorrer cada elemento de la lista anidada utilizando lapply.
    2. Dentro de cada elemento, recorrer cada elemento de la lista del segundo nivel utilizando otra función lapply.
    3. Combinar el nombre del primer nivel con el índice del elemento del segundo nivel utilizando la función paste.
    4. Asignar el nombre combinado al elemento actual.

    Aquí está el código para lograr esto:

    nested_list <- lapply(nested_list, function(x) {
      names(x) <- paste(names(nested_list)[which(nested_list==x)], seq_along(x), sep="_")
      lapply(x, function(y) {
        names(y) <- paste(names(x), seq_along(y), sep="_")
        y
      })
    })
    

    El código anterior primero asigna nombres al primer nivel de la lista anidada utilizando la función paste y la función names. Luego, recorre cada elemento del segundo nivel y les asigna nombres utilizando las funciones paste y names.

    La estructura resultante de la nested_list será la misma que la solicitada en la pregunta.

Comments are closed.