Como Criar uma Variável em R
Uma variável em R é um nome associado a um valor. Você cria uma com a seta de atribuição <-: o nome vem antes da seta, o valor depois dela.
Três variáveis, três tipos diferentes de valor, e nenhuma declaração de tipo em lugar algum - R infere o tipo a partir do próprio valor (mais sobre isso em tipos de dados). Depois que uma variável existe, você a usa em qualquer lugar onde usaria o valor:
A reatribuição funciona da mesma forma. Uma variável troca de valor sem reclamar - até de tipo - no momento em que você atribui de novo:
R não reclamou de uma string virar um número. Essa flexibilidade é conveniente, mas se o significado de uma variável muda no meio de um script, isso geralmente é um sinal de que você deveria escolher um nome novo.
Por Que R Usa <- em Vez de =
Eis a pergunta que todo mundo faz: age = 30 também funciona, então por que todo livro, guia de estilo e pacote de R usa a seta?
Porque = em R é duas coisas diferentes dependendo de onde aparece. No nível superior, ele atribui. Dentro de uma chamada de função, ele associa um argumento pelo nome - e não cria uma variável:
Se você tentasse mean(values, na.rm <- TRUE), criaria acidentalmente uma variável global chamada na.rm e passaria TRUE posicionalmente - legal, errado e difícil de perceber. A convenção que mantém isso legível é simples:
<-sempre significa atribuição.=sempre significa "este argumento recebe este valor" dentro de uma chamada de função.
Siga essa divisão e cada linha de R que você ler dirá de relance se algo está sendo criado ou passado. É a regra de estilo mais universal do mundo R - o RStudio até dá ao <- um atalho de teclado próprio (Alt+-).
Os Primos Raramente Usados: ->, = e assign()
R tem mais duas formas de atribuir, ambas valendo a pena reconhecer mesmo que você raramente as escreva.
A seta invertida -> atribui na outra direção - valor primeiro, nome por último:
Você a verá ocasionalmente no final de um pipeline longo ("calcule tudo isso e depois armazene"), mas a maioria dos guias de estilo recomenda evitá-la: quem lê procura no início da linha o nome que está sendo definido.
assign() cria uma variável a partir de uma string, o que significa que o nome pode ser construído em tempo de execução:
Isso parece engenhoso e é quase sempre a ferramenta errada - um conjunto de variáveis numeradas é, na verdade, um vetor ou uma lista disfarçada. Recorra a assign() apenas quando um nome realmente precisar ser calculado; seu parceiro get("score") lê uma variável pelo nome em string.
Regras de Nomenclatura
R aceita nomes que:
- Contêm letras, dígitos, pontos (
.) e underscores (_). - Começam com uma letra, ou com um ponto não seguido de dígito.
- Não são palavras reservadas (
if,for,TRUE,NULL,functione mais algumas).
Portanto, todos estes são válidos:
E estes não são:
2nd_user- não pode começar com dígito._temp- também não pode começar com underscore (ao contrário de Python).user-name- um hífen é subtração, não um caractere de nome.TRUE- palavra reservada.
Os nomes diferenciam maiúsculas de minúsculas: total, Total e TOTAL são três variáveis sem nenhuma relação, e R não vai avisar quando você criar uma por erro de digitação.
Listando e Removendo: ls() e rm()
Toda variável que você cria vai parar no workspace (o ambiente global). ls() lista o que está lá, e rm() remove coisas:
Dois detalhes que vale a pena conhecer. Primeiro, rm(list = ls()) apaga o workspace inteiro - prático no início de uma sessão exploratória, destrutivo em qualquer outro lugar. Segundo, nomes que começam com ponto (como .cache) ficam ocultos do ls() a menos que você chame ls(all.names = TRUE) - a mesma convenção dos arquivos ocultos no Unix.
Convenções de Nomenclatura: Use snake_case
Além das regras rígidas, a comunidade R moderna (e o guia de estilo do tidyverse) consolidou algumas convenções:
lower_snake_casepara variáveis e funções:retry_count,fit_model.- Pontos em nomes são válidos, porém datados: o R base está cheio de nomes da era
data.frame, comomy.data, mas pontos também carregam significado no sistema de métodos S3 do R (print.data.frameé "o método print para data frames"), então código novo os evita. - Nada de prefixos húngaros, nada de camelCase - você verá
camelCaseem pacotes mais antigos, mas snake_case é onde o ecossistema aterrissou. - R não tem constantes de verdade; a convenção é nomear as pretensas constantes em maiúsculas (
MAX_RETRIES <- 5) e simplesmente não reatribuí-las.
Escolha nomes descritivos e mantenha a consistência. avg_score custa quatro teclas a mais do que as e poupa a todo leitor futuro uma viagem de volta ao início do script.
O Que Você Leva Daqui
name <- valuecria uma variável; a comunidade reserva=para argumentos de função.->eassign()existem; você vai lê-los com mais frequência do que deveria escrevê-los.- Nomes usam letras, dígitos, pontos e underscores; não podem começar com dígito ou underscore, e diferenciam maiúsculas de minúsculas.
ls()mostra o workspace,rm()faz a limpeza.- Escreva em
snake_casee seu código vai se parecer com o R que todo mundo escreve hoje.
A seguir: que tipos de valores essas variáveis realmente guardam - numeric, integer, character e logical.
Perguntas frequentes
Como criar uma variável em R?
Escreva o nome, a seta de atribuição <- e o valor: age <- 30. R descobre o tipo a partir do valor - não existe etapa de declaração. age = 30 também funciona no nível superior, mas a convenção da comunidade é usar <-.
Qual é a diferença entre <- e = em R?
No nível superior de um script, eles fazem a mesma coisa. Dentro de uma chamada de função, não: mean(x, na.rm = TRUE) usa = para associar um argumento pelo nome, não para criar uma variável. Como o = desempenha os dois papéis dependendo do contexto, os guias de estilo de R reservam <- para atribuição e = para argumentos.
Como excluir uma variável em R?
rm(x) remove a variável x do workspace. rm(list = ls()) remove tudo - útil para começar do zero, perigoso no meio de uma análise. ls() lista o que existe no momento.
Nomes de variáveis em R podem conter pontos?
Sim - my.data é um nome perfeitamente válido, e código R mais antigo usa pontos por toda parte. O estilo moderno prefere underscores (my_data) porque pontos também têm significado no sistema de métodos S3 do R, o que torna nomes com ponto ambíguos de ler.