Modificando Listas
Parte da seção Fundamentos do Journey de R da Coddy — lição 73 de 78.
Agora que você sabe como criar listas e acessar seus elementos, vamos aprender como modificá-las. Você pode alterar elementos existentes, adicionar novos ou remover elementos inteiramente.
Para alterar um elemento existente, use colchetes duplos com atribuição:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Saída:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEPara adicionar um novo elemento, basta atribuir a um índice que ainda não existe:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Saída:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEPara remover um elemento, atribua NULL a ele:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Saída:
[[1]]
[1] 10
[[2]]
[1] TRUEObserve que após remover o segundo elemento, os elementos restantes se deslocam para preencher a lacuna. O elemento que estava na posição 3 agora está na posição 2.
Desafio
FácilVocê receberá três linhas de entrada:
- Três valores separados por vírgula para inicializar uma lista (ex:
50,hello,TRUE) - Um índice e um novo valor separados por uma vírgula para modificação (ex:
2,goodbye) - Um índice do elemento a ser removido (ex:
3)
Realize as seguintes operações:
- Crie uma lista com os três valores iniciais (converta-os para os tipos apropriados: numérico, caractere, lógico)
- Imprima a lista original
- Modifique o elemento no índice especificado com o novo valor (mantenha-o como uma string de caracteres)
- Imprima a lista após a modificação
- Adicione um novo quarto elemento à lista com o valor
999 - Imprima a lista após adicionar o novo elemento
- Remova o elemento no índice especificado (da terceira entrada)
- Imprima a lista final
Por exemplo, se as entradas forem:
100,world,FALSE
1,updated
2A saída deve 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] 999Explicação:
- Lista original: 100, "world", FALSE
- Após modificar o índice 1: "updated", "world", FALSE
- Após adicionar o quarto elemento: "updated", "world", FALSE, 999
- Após remover o índice 2: "updated", FALSE, 999 (os elementos restantes se deslocam)
Lembre-se de usar colchetes duplos [[ ]] para modificações e atribuir NULL para remover elementos.
Folha de consulta
Para modificar um elemento existente em uma lista, use colchetes duplos com atribuição:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"Para adicionar um novo elemento a uma lista, atribua a um índice que ainda não existe:
my_list <- list(10, "hello")
my_list[[3]] <- FALSEPara remover um elemento de uma lista, atribua NULL a ele:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULLQuando um elemento é removido, os elementos restantes se deslocam para preencher a lacuna. O elemento que estava na posição 3 passa a ser a posição 2.
Experimente você mesmo
# Ler entrada
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Três valores separados por vírgula
modify_input <- suppressWarnings(readLines(con, n = 1)) # Índice e novo valor
remove_index <- suppressWarnings(readLines(con, n = 1)) # Índice para remover
close(con)
# Analisar os valores iniciais
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Analisar entrada de modificação
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Analisar índice de remoção
rem_index <- as.numeric(remove_index)
# TODO: Escreva seu código abaixo
# 1. Crie uma lista com os três valores iniciais (val1, val2, val3)
# 2. Imprima a lista original
# 3. Modifique o elemento em mod_index com mod_value
# 4. Imprima a lista após a modificação
# 5. Adicione um novo quarto elemento com o valor 999
# 6. Imprima a lista após a adição
# 7. Remova o elemento em rem_index (use NULL)
# 8. Imprima a lista finalEsta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Fundamentos
4Operadores Parte 2
Operadores Lógicos (AND, OR)Operadores Lógicos Parte 2 (NOT)Recapitulação - Lógica SimplesLógica Vetorizada Parte 1Lógica Vetorizada Parte 27Calculadora de Divisão de Conta
Mensagem de Boas-vindasObtendo a Entrada do Usuário10FizzBuzz com um Toque Especial
Visão Geral do JogoA Função FizzBuzz2Variáveis e Tipos de Dados
Tipo de Dado NuméricoTipo de Dado InteiroTipo de Dado CaractereTipo de Dado LógicoVerificando Tipos de DadosConvenções de NomenclaturaValores Ausentes: NARecapitulação - Criação de Variáveis8Laços de Repetição
Laço ForLaço WhileBreakNext (Continue)Recapitulação - FatorialGeração de Sequências (seq, :)Laços AninhadosRecapitulação - Entrada Dinâmica11Vetores
Criando vetores com c()Acessando elementos de um vetorModificando vetoresOperações com vetoresRecapitulação - Vetor de preçosRecapitulação - Vetor invertidoVetores nomeados14Listas em R
Criando ListasAcessando Elementos de ListasModificando ListasListas NomeadasRecapitulação - Lista de Produtos3Operadores Parte 1
Operadores AritméticosDivisão Inteira e MóduloOperadores de AtribuiçãoRecapitulação - Matemática SimplesOperadores de Comparação6IO Básico
Saída com PrintCat para SaídaSaída com VariáveisLendo Entrada com readline()Básico de Conversão de TiposRecapitulação - Calculadora de IdadeRecapitulação - Verdadeiro ou Falso9Funções
Declarando uma FunçãoArgumentos de FunçãoValores de RetornoRecapitulação - Função SigmaRecapitulação - Função de ValidaçãoValores de Parâmetro Padrão