Menu

Sintaxe do R: O Básico em 5 Minutos

O núcleo da sintaxe do R: atribuição com <-, expressões e impressão automática, chamadas de função com argumentos nomeados e a regra de que tudo é um vetor.

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

Expressões e Impressão Automática

R é uma linguagem de expressões: quase toda linha que você escreve produz um valor. No console, uma expressão digitada sozinha é avaliada e seu valor é impresso automaticamente - sem precisar de print():

Cada resultado vem prefixado com [1] - é o R te dizendo a posição do primeiro valor mostrado, uma primeira pista de que o R pensa em vetores (mais abaixo). A impressão automática tem uma pegadinha que vale conhecer no primeiro dia: ela se aplica a expressões isoladas no nível superior. A mesma expressão dentro do corpo de uma função ou de um laço for não imprime nada, e é por isso que scripts usam cat() ou print() explícitos para a saída que você precisa ver.

Atribuição: A Seta

O operador de atribuição do R é <-, uma seta apontando para o nome que recebe o valor:

Leia radius <- 5 como "radius recebe 5". Sim, = também funciona para atribuição no nível superior, e sim, os novatos perguntam por que alguém digitaria dois caracteres em vez de um. A resposta é convenção com dentes: todos os principais guias de estilo, a documentação do R base e efetivamente todo código R que você vai ler usam <- para atribuição, reservando = para um trabalho específico - nomear argumentos dentro de chamadas de função (próxima seção). Seguir a convenção torna as duas operações visualmente distintas. No RStudio, Alt+- (Option+- no macOS) digita a seta por você.

Note que uma atribuição não imprime automaticamente - area <- 78.5 armazena o valor em silêncio. É por isso que o trecho acima precisa do print().

Sensibilidade a Maiúsculas e Minúsculas

O R é estritamente sensível a maiúsculas e minúsculas, tanto nos nomes que você cria quanto nos que a linguagem fornece:

Duas variáveis diferentes. Da mesma forma, mean() é uma função e Mean() não existe. Quando o R te receber com object 'x' not found ou could not find function, cheque a capitalização antes de qualquer outra coisa - é o erro de iniciante mais comum de todos.

Chamadas de Função e Argumentos Nomeados

Funções são chamadas com parênteses, com argumentos separados por vírgulas. Argumentos podem ser correspondidos por posição, por nome, ou uma mistura:

A chamada a seq() mostra a sintaxe de argumentos nomeados do R - e é aqui que o = ganha o seu sustento: dentro de uma chamada, name = value rotula um argumento. Argumentos nomeados te libertam de decorar a ordem dos parâmetros, e tornam as chamadas autodocumentadas; seq(0, 100, 25) funciona de forma idêntica, mas diz menos ao leitor. A convenção de trabalho: passe o primeiro argumento (geralmente os dados) por posição e nomeie o resto.

Obter ajuda sobre qualquer função está a um toque de distância: ?seq no console abre a documentação dela.

Tudo É um Vetor

A ideia que faz o R parecer diferente das outras linguagens: não existem números avulsos. Até 5 é um vetor de comprimento um, e as operações se aplicam elemento a elemento a vetores inteiros:

Nenhum laço em lugar nenhum, e mesmo assim cada elemento foi convertido. Na maioria das linguagens, isso seriam três iterações de um laço for; no R, é aritmética. Isso é a vetorização, e ela molda tudo - operadores de comparação, funções de string e funções matemáticas funcionam todas assim. É por isso que o R idiomático tem muito menos laços do que você esperaria; a história completa está em vetores.

Chaves e Blocos

Corpos de várias linhas - para if, laços e funções - são agrupados com chaves {}:

Duas coisas a notar. A condição fica entre parênteses, e é um if puro, não if: nem if ... then. E, ao contrário do Python, a indentação não carrega significado no R - as chaves definem o bloco, a indentação é para os humanos. Omitir as chaves em blocos de uma linha é legal, mas é uma fonte clássica de bugs de edição; simplesmente use-as sempre.

Espaços em Branco e Ponto e Vírgula

O R ignora espaços em branco extras, e uma nova linha encerra uma instrução - sem necessidade de ponto e vírgula:

A quebra entre linhas funciona porque a linha 3 termina com +, então o R sabe que a expressão não acabou. Essa é a única regra a lembrar ao quebrar linhas longas: quebre depois de um operador ou de uma vírgula, nunca antes, ou o R tratará a primeira linha como completa. O ponto e vírgula existe apenas para espremer duas instruções em uma linha (a <- 1; b <- 2) - legal, desencorajado, facilmente evitável.

Estilo: Como o Código R É Escrito

Além da gramática, o R tem convenções fortes da comunidade (codificadas no guia de estilo do tidyverse, que a maior parte do ecossistema segue):

  • <- para atribuição, = apenas para argumentos dentro de chamadas.
  • Nomes em snake_case: monthly_revenue, não monthlyRevenue nem monthly.revenue. Pontos são legais em nomes no R, mas é melhor evitá-los - eles colidem com um padrão de nomenclatura que as entranhas do R usam.
  • Espaços ao redor de operadores (x <- a * 2, não x<-a*2) e depois de vírgulas.
  • Indente com quatro espaços dentro das chaves (alguns times usam dois; escolha um e mantenha a consistência).
  • Uma instrução por linha.

Nada disso é imposto pelo interpretador. Tudo isso é imposto por qualquer pessoa que leia o seu código. A metade dessa história que trata de nomes continua em variáveis.

O Que Você Leva Daqui

  • O R avalia expressões e imprime automaticamente as isoladas no console - mas não dentro de funções ou laços.
  • Atribua com <- ("recebe"); use = apenas para nomear argumentos em chamadas de função.
  • O R é totalmente sensível a maiúsculas e minúsculas - erros de capitalização causam a maioria dos erros iniciais de "not found".
  • Tudo é um vetor, e as operações se aplicam elemento a elemento: c(1, 2, 3) * 2 é 2 4 6, sem laço.
  • Chaves definem blocos, novas linhas encerram instruções, e snake_case mais as convenções de espaçamento fazem seu código ler como o de todo mundo.

A seguir: comentários - como anotar código R e o que fazer quanto à falta de sintaxe de comentário de bloco no R.

Perguntas frequentes

O que significa <- no R?

<- é o operador de atribuição do R: x <- 5 armazena o valor 5 sob o nome x. Leia como 'recebe'. = também atribui no nível superior, mas a convenção da comunidade - imposta por todos os principais guias de estilo - é <- para atribuição e = apenas para nomear argumentos dentro de chamadas de função.

O R diferencia maiúsculas de minúsculas?

Sim, completamente. total, Total e TOTAL são três nomes diferentes, e chamar Mean(x) em vez de mean(x) é um erro, não um aviso. Um erro de 'could not find function' ou 'object not found' é muitas vezes só um erro de digitação de maiúsculas.

Preciso de ponto e vírgula no R?

Não. Uma nova linha encerra uma instrução. Ponto e vírgula só é necessário para espremer duas instruções em uma linha (a <- 1; b <- 2), o que os guias de estilo desencorajam de qualquer forma. Escreva uma instrução por linha e nunca mais pense em ponto e vírgula.

O que significa dizer que o R é vetorizado?

As operações básicas do R funcionam em vetores inteiros de uma vez. c(1, 2, 3) * 22 4 6 - a multiplicação se aplica a cada elemento sem nenhum laço. A maior parte do código que seria um laço for em outra linguagem é uma única expressão no R.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR