Trabalhando com Listas

Layla Comparin
rladiesbh

--

No último artigo, trabalhamos com matrizes para analisar os rankings das universidades e escolher uma universidade para você entrar. Agora que você está prestes a começar seu primeiro ano em Harvard, terá que decidir em quais clubes entrar para que você possa fazer amigos com interesses semelhantes. Você tem muitos interesses diferentes em esportes, arte e música e decide explorar uma variedade de atividades.

Neste artigo, aprenderemos a trabalhar com dados armazenados em listas enquanto você organiza os resultados de sua investigação de diferentes clubes universitários.

Nos três primeiras artigos deste curso, aprendemos sobre duas estruturas de dados diferentes:

  • Vetores: Estruturas de dados unidimensionais que contêm um único tipo de dados.
  • Matrizes: estruturas de dados bidimensionais que contêm um único tipo de dados.

Neste artigo, aprenderemos sobre listas, que podem conter vários tipos de objetos. Os objetos podem consistir em diferentes estruturas de dados, incluindo elementos de dados únicos, vetores e matrizes.

Por que nós queremos criar listas de objetos no R? A resposta é que armazenar objetos em listas nos permite fazer uso de alguns recursos no R muito poderosos para executar a mesma operação em cada objeto na sua lista , o que pode evitar que você digite repetitivamente a mesma função.

Aprenderemos como aproveitar o poder das listas para realizar tarefas como as ilustradas acima no próximo artigo. Por enquanto, forneceremos uma base sólida para criar, manipular e entender a estrutura das listas.

Para criar uma lista, usaremos a funçãolist(). A funçãolist()usa elementos que você deseja incluir em sua lista como entradas. Você pode então atribuir à sua lista um nome de variável. No exemplo a seguir, estamos armazenando três nomes de clubes em uma lista:

clubs <- list("tennis", "film", "outdoors")

Para se acostumar a usar a função list(), vamos armazenar alguns dos clubes em que você está interessado em uma lista.

Vamos aos exercícios:

Armazene os seguintes nomes de clube em uma lista chamada uni_clubs:

  • "dança de salão"
  • "rugby"
  • "observatório de pássaros"
  • "cerâmica"

Vamos ver a lista de clubes que você criou:

[[1]]
[1] "dança de salão"

[[2]]
[1] "rugby"

[[3]]
[1] "observatório de pássaros"

[[4]]
[1] "cerâmica"

Observe que cada clube que você armazenou na lista aparece em sua própria linha e sua posição na lista, entre parênteses mostrados acima dele ( [[1]]). Nesta lista, os números de um a quatro informam a ordem dos objetos armazenados na lista.

A lista uni_clubs contém apenas elementos únicos do tipo de dados de character. Lembre-se, no entanto, que as listas podem conter objetos de qualquer tipo de dados. Você pode usá-los para armazenar outras informações da pesquisa do seu clube, incluindo descrições de clubes, tipos de atividades, custo de anuidades do clube e horários em que o clube se reúne.

Aqui estão alguns dos dados que você coletou para o clube de xadrez:

club_title <- c("Clube de Xadrez")
club_description <- c("Abre duas noites por semana para os membros jogarem xadrez. Lanches são fornecidos.")
club_dues <- c(50, 20, 15)
meeting_days <- c("segunda-feira", "quarta-feira")
meeting_times <- c("18:00", "20:00")

Vamos salvar os dados do clube de xadrez em uma lista. As informações que temos são:

  • Título do clube (vetor de dados de character)
  • Descrição do clube (vetor de dados de character)
  • Taxas do clube (vetor de dados numéricos)
  • Dias de reunião (vetor de dados de character)
  • Horários de reunião (vetor de dados de character)

Vamos aos exercícios:

Crie uma matriz, chamada club_meetings, contendo o meeting_dayse meeting_times. Organize a matriz para que meeting_daysseja a primeira linha.

Armazene os seguintes objetos, nesta ordem, em uma lista chamada chess_club:

  • club_title
  • club_description
  • club_dues
  • club_meetings

Agora criamos a lista chess_clubpara organizar as informações coletadas sobre o clube:

Observe que os nomes dos objetos não são retidos na lista, mas os tipos de dados originais de cada objeto são.

Para especificar nomes para objetos de lista dentro da funçãolist(), você pode usar =. Por exemplo, vamos criar uma lista contendo dados que você coletou sobre o clube de Rugby:

rugby_club <- list(club_title = c("Clube de Rugby"),
club_description = c("Partidas de Rugby contra clubes de universidades locais"),
club_dues = c(100, 50))

A lista resultante rugby_clubcontém três objetos com nomes atribuídos a eles:

Frequentemente, queremos usar um vetor de dados de caracteres para atribuir nomes a objetos de uma lista. Atribuir nomes para listar objetos é semelhante a atribuir nomes a elementos vetoriais: Usaremos a funçãonames().

Para ilustrar isso, vamos criar uma lista contendo dados para o clube de dança de salão:

ballroom_dancing <- list(c("Clube de Dança de Salão"),
c("Valsa, salsa e tango para competições."),
c(150))

Aqui está a lista:

Agora, vamos atribuir um nome para cada objeto em ballroom_dancing:

names(ballroom_dancing) <- c("club_title", "club_description", "club_dues")

Se você exibir ballroom_dancing, verá que cada objeto é nomeado:

Como nos vetores, se você chamar a funçãonames() em uma lista sem nomes atribuídos, a função retornará NULL.

Vamos aos exercícios:

Crie um vetor chess_club_namesde nomes para os objetos da lista chess_club. Use a funçãonames() para atribuir os nomes como atributos aos elementos da lista chess_club.

Nos artigos anteriores, aprendemos a indexar vetores e matrizes para extrair um subconjunto de valores. Da mesma forma, podemos indexar listas.

Geralmente, usamos duas operações de indexação diferentes nas listas:

  • Parênteses únicos para retornar uma lista de elementos selecionados ( [])
  • Parênteses duplos para retornar um único elemento ( [[]])

Vamos pegar a listarugby_club como um exemplo:

Se queremos extrair o segundo objeto na lista e escrevemos o seguinte código:

rugby_club [ 2 ]

Nós vamos obter o seguinte resultado:

Se verificarmos o tipo do objeto, vemos que é uma lista :

Vamos tentar executar esta operação usando colchetes duplos:

Desta vez, a saída é um único elemento do caractere de tipo de dados.

Para ilustrar melhor quando você escolher usar colchetes simples ou duplos para indexar uma lista, vamos extrair vários elementos da lista.

Lembre-se dos artigos anteriores que podemos extrair vários elementos usando c(). Vamos usar colchetes simples para extrair o primeiro e o terceiro objetos da listarugby_club:

rugby_club [ c ( 1 , 3 )]

A saída consiste em uma lista dos primeiros e terceiros vetores nos quais armazenamos rugby_club:

O que acontece se usarmos colchetes duplos para indexar rugby_club?

rugby_club [[ c ( 3 , 2 )]]

Agora, a saída consiste no segundo elemento no terceiro objeto da lista:

Quando os objetos em uma lista possuem nomes associados a eles, você pode usá-los para indexação.

As duas linhas de código a seguir extrairão os elementos contidos no terceiro objeto da listarugby_club:

Vamos aos exercícios:

Aqui está a listachess_club:

Indexe a listachess_club para retornar o segundo elemento club_dues.

Além de extrair elementos, também podemos indexar listas para alterar componentes específicos da lista.

Por exemplo, digamos que você falou com uma nova amiga que é membro do clube de rugby. Ela diz a você que as cotas do clube pagas pelos membros no início dos semestres de outono e primavera aumentaram em 10 dólares cada.

Como resultado, você gostaria de alterar os valores club_duesarmazenados em sua listarugby_club.

Para substituir os valoresclub_dues na listarugby_club,nós escreveríamos:

rugby_club $ club_dues  <-  c ( 110 , 60 )

Também podemos substituir apenas um dos valores das cotas. Digamos que outro amigo no clube de Rugby tenha explicado que os capitães do clube estão considerando descontar as cotas do semestre do outono em US $ 50 para incentivar mais ingressantes a ingressar neste ano. Para substituir 110 por 80, você deveria:

rugby_club [[ c ( 3 , 1 )]] <-  80

Lembre-se que o uso dos colchetes duplos aqui especifica o primeiro valor do terceiro objeto na lista.

Vamos modificar a lista chess_club,para refletir as novas informações que sua pesquisa revelou. Atualmente, os membros do clube de xadrez pagam taxas durante o semestre do outono (50 dólares), no semestre da primavera (20 dólares) e durante o verão (15 dólares) se estiverem no campus. Como poucos estudantes permanecem no campus e os custos de lanche são baixos, o capitão do clube está reduzindo as cotas do clube de verão para 5 dólares.

Vamos aos exercícios:

Aqui está a listachess_club:

  • Escreva o código para substituir o terceiro elemento de club_duespara 5.
  • Exiba o terceiro elemento club_duesna listachess_club para verificar se você o substituiu corretamente.

À medida que continuamos a pesquisar clubes, você adquirirá mais informações que poderá incorporar às suas listas existentes.

Já que uma das razões pelas quais você quer se juntar a clubes é encontrar novos amigos, você gostaria de se juntar a clubes que têm muitos membros que também estão no primeiro ano de universidade.

Ao pesquisar os clubes em que você está interessada, você encontrou algumas informações sobre o número de estudantes universitários de primeiro, segundo, terceiro e quarto anos que participaram do clube durante os semestres de primavera e outono do ano passado.

Para o clube de Rugby, você organizou as informações na forma de dados numéricos em uma matriz denominada member_years_rugby:

outono <- c(8, 12, 13, 2)
primavera <- c(6, 11, 14, 3)
member_years_rugby <- rbind(outono, primavera)
colnames(member_years_rugby) <- c("first_yr", "second_yr", "third_yr", "fourth_yr")

Aqui está a matriz:

Gostaríamos de adicionar essa matriz como um objeto à lista rugby_club, que atualmente contém três objetos:

Vamos adicionar member_years_rugbycomo um quarto objeto da lista. Para adicionar um elemento a uma lista, podemos especificar a posição que queremos que o novo elemento ocupe usando colchetes duplos:

rugby_club [[ 4 ]] <-  member_years_rugby

A lista rugby_club resultante contém a matrizmember_years_rugbycomo um quarto objeto:

Lembre-se de que os elementos adicionados a uma lista não possuem nomes associados a eles, a menos que sejam especificados.

Poderíamos atribuir um nome ao objeto como aprendemos anteriormente neste artigo. Se queremos acrescentar member_years_rugbyao rugby_club e dar-lhe um nome, escrevemos:

rugby_club [[ "member_years_rugby" ]] <-  member_years_rugby

Nós pesquisamos a afiliação ao clube de xadrez e encontramos os seguintes números de membros do primeiro ano que se juntaram durante os semestres de primavera e outono do ano passado:

Outono: 12 Primavera: 15

Vamos adicionar essas informações à nossa lista chess_club.

Vamos aos exercícios:

  • Crie um vetor first_yearsque contém o número de membros do primeiro ano do clube de xadrez nos semestres de primavera e outono do ano passado.
  • Use a sintaxe chess_club[["object_name"]] <- objectpara adicionar a matriz com um nome atribuído.
  • Indexe chess_clubpara exibir o número de alunos do primeiro ano que participaram do clube de xadrez durante o semestre da primavera do ano passado.

Até agora, criamos listas de dados para vários clubes:

  • rugby_club
  • ballroom_dancing
  • chess_club

Talvez nós gostaríamos de combiná-los em uma única lista.

A sintaxe para combinar várias listas é semelhante àquela para combinar vetores. Para combinar as listas rugby_clube ballroom_dancingem uma nova lista chamada uni_club_data, podemos usar a funçãoc():

uni_club_data  <-  c ( rugby_club , ballroom_dancing )

A nova listauni_club_data contém todos os objetos presentes nas duas listas que combinamos.

Combinar listas usando c()anexa listas umas às outras, de ponta a ponta, para criar uma lista única. Podemos usá-lo para combinar quantas listas forem necessárias.

A uni_club_data é confusa porque alguns dos elementos club_descriptiontêm o mesmo nome. Precisamos de uma maneira de combinar listas que preservem a organização de cada lista.

Lembre-se de que as listas podem conter qualquer tipo de objeto de dados, incluindo outras listas. Em vez de combinar elementos das três listas em uma única lista como você usou c(), você pode usar list()para criar uma nova lista de listas . Vamos criar uma lista de listas uni_club_list, para ilustrar como isso funciona.

Lembre-se da sintaxe para criar uma lista de objetos nomeados anteriores nesta missão:

uni_club_list  <-  list ( rugby_club  =  rugby_club , ballroom_dancing  =  ballroom_dancing )

A lista resultante contém as duas listas rugby_clube ballroom_dance, como objetos:

Observe que o nome de cada objeto uni_club_listsegue o nome da lista a que pertence (ou rugby_clubou ballroom_dancing).

Criar uma lista de listas será uma técnica que usaremos quando você for executar a mesma operação em várias listas ao mesmo tempo em artigos futuros.

Por enquanto, vamos praticar criando uma lista das três listas de dados de clube com as quais trabalhamos neste artigo.

Vamos aos exercícios:

Crie uma nova lista uni_clubs, que contenha as seguintes listas:

  • rugby_club
  • ballroom_dancing
  • chess_club

Em vez de combinar os objetos da lista em uma única lista, crie uma lista de listas usando a list()função. Escreva seu código para que cada lista uni_clubsseja nomeada. Mantenha os nomes das listas originais.

Até agora, neste curso, você deu grandes passos para aprender a sintaxe básica do R e familiarizar-se com algumas das estruturas de dados importantes da linguagem: vetores, matrizes e listas. Você usou essas habilidades para trabalhar e analisar vários conjuntos de dados à medida que calculou notas, classificou universidades e organizou dados de clubes.

Neste link, você encontrará um resumo do que aprendeu até agora: Uma lista útil de “tópicos” para os quais você deve pegar como base ao continuar aprendendo R.

No próximo artigo, você importará os dados para o R, armazenará como um data frame e aprofundará a análise.

E não esqueça, a partir desse semestre, iremos promover 3 cursos gratuitos sobre R, sendo eles Introdutório, Intermediário e Avançado. :) As datas já foram divulgadas e as inscrições serão abrirão e já esgotaram. Mas semestre que vem tem mais.

Acompanhem nossas redes:

https://www.instagram.com/rladiesbh/

https://twitter.com/rladiesbh

https://www.facebook.com/rladiesbh

--

--

Layla Comparin
rladiesbh

Engenheira de Dados por profissão, confeiteira e dançarina por amor ♥️