Menu

Variáveis e Atribuição em R: <-, = e assign()

Como criar variáveis em R com a seta <-, quando o = é obrigatório, as regras de nomenclatura e como listar e remover variáveis com ls() e rm().

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

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, function e 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_case para 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, como my.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á camelCase em 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 <- value cria uma variável; a comunidade reserva = para argumentos de função.
  • -> e assign() 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_case e 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.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR