Modificar listas
Parte de la sección Fundamentos del Journey de R de Coddy — lección 73 de 78.
Ahora que ya sabes cómo crear listas y acceder a sus elementos, aprendamos cómo modificarlas. Puedes cambiar elementos existentes, añadir otros nuevos o eliminar elementos por completo.
Para cambiar un elemento existente, use corchetes dobles con asignación:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Resultado:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEPara añadir un nuevo elemento, simplemente asigna a un índice que aún no existe:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Salida:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEPara eliminar un elemento, asigna NULL a este:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Salida:
[[1]]
[1] 10
[[2]]
[1] TRUEObserva que después de eliminar el segundo elemento, los elementos restantes se desplazan para llenar el hueco. El elemento que estaba en la posición 3 ahora está en la posición 2.
Desafío
FácilRecibirás tres líneas de entrada:
- Tres valores separados por comas para inicializar una lista (por ejemplo,
50,hello,TRUE) - Un índice y un nuevo valor separados por una coma para su modificación (por ejemplo,
2,goodbye) - Un índice del elemento a eliminar (por ejemplo,
3)
Realiza las siguientes operaciones:
- Crea una lista con los tres valores iniciales (conviértelos a los tipos apropiados: numérico, carácter, lógico)
- Imprime la lista original
- Modifica el elemento en el índice especificado con el nuevo valor (mantenlo como una cadena de caracteres)
- Imprime la lista después de la modificación
- Añade un nuevo cuarto elemento a la lista con el valor
999 - Imprime la lista después de añadir el nuevo elemento
- Elimina el elemento en el índice especificado (de la tercera entrada)
- Imprime la lista final
Por ejemplo, si las entradas son:
100,world,FALSE
1,updated
2La salida debería ser:
[[1]]
[1] 100
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[4]]
[1] 999
[[1]]
[1] "updated"
[[2]]
[1] FALSE
[[3]]
[1] 999Explicación:
- Lista original: 100, "world", FALSE
- Después de modificar el índice 1: "updated", "world", FALSE
- Después de añadir el cuarto elemento: "updated", "world", FALSE, 999
- Después de eliminar el índice 2: "updated", FALSE, 999 (los elementos restantes se desplazan)
Recuerda usar corchetes dobles [[ ]] para las modificaciones y asignar NULL para eliminar elementos.
Hoja de referencia
Para modificar un elemento existente en una lista, utiliza corchetes dobles con asignación:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"Para añadir un nuevo elemento a una lista, asigna a un índice que aún no exista:
my_list <- list(10, "hello")
my_list[[3]] <- FALSEPara eliminar un elemento de una lista, asígnale NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULLCuando se elimina un elemento, los elementos restantes se desplazan para llenar el hueco. El elemento que estaba en la posición 3 pasa a ser la posición 2.
Pruébalo tú mismo
# Leer entrada
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Tres valores separados por comas
modify_input <- suppressWarnings(readLines(con, n = 1)) # Índice y nuevo valor
remove_index <- suppressWarnings(readLines(con, n = 1)) # Índice a eliminar
close(con)
# Analizar los valores iniciales
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Analizar la entrada de modificación
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Analizar el índice de eliminación
rem_index <- as.numeric(remove_index)
# TODO: Escribe tu código a continuación
# 1. Crear una lista con los tres valores iniciales (val1, val2, val3)
# 2. Imprimir la lista original
# 3. Modificar el elemento en mod_index con mod_value
# 4. Imprimir la lista después de la modificación
# 5. Añadir un nuevo cuarto elemento con el valor 999
# 6. Imprimir la lista después de añadir
# 7. Eliminar el elemento en rem_index (usar NULL)
# 8. Imprimir la lista finalEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
4Operadores Parte 2
Operadores lógicos (AND, OR)Operadores lógicos Parte 2 (NOT)Resumen - Lógica simpleLógica vectorizada Parte 1Lógica vectorizada Parte 27Calculadora para dividir la cuenta
Mensaje de bienvenidaObtener la entrada del usuario2Variables y tipos de datos
Tipo de dato numéricoTipo de dato enteroTipo de dato de caracteresTipo de dato lógicoComprobación de tipos de datosConvenciones de nomenclaturaValores faltantes: NAResumen - Creación de variables8Bucles
Bucle ForBucle WhileBreakNext (Continue)Repaso - FactorialGeneración de secuencias (seq, :)Bucles anidadosRepaso - Entrada dinámica11Vectores
Crear vectores con c()Acceder a elementos de un vectorModificar vectoresOperaciones con vectoresResumen - Vector de preciosResumen - Vector invertidoVectores con nombre14Listas en R
Crear listasAcceso a elementos de la listaModificar listasListas con nombreRepaso - Lista de productos3Operadores Parte 1
Operadores aritméticosDivisión entera y móduloOperadores de asignaciónRepaso - Matemáticas simplesOperadores de comparación6E/S básica
Imprimir salidaCat para salidaSalida con variablesLectura de entrada con readline()Conceptos básicos de conversión de tiposResumen - Calculadora de edadResumen - Verdadero o falso9Funciones
Declarar una funciónArgumentos de una funciónValores de retornoRepaso - Función SigmaRepaso - Función de validaciónValores de parámetros por defecto