0Pricing
R Academy · Aula

Atribuição e operadores especiais

Explore >, %in% e o operador de pipe em R.

Atribuição e operadores especiais é uma aula grátis de R Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de R Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de R Academy inclui 4 aulas no total.

Atribuição em R

O R oferece várias maneiras de atribuir valores a variáveis. A forma mais idiomática é <-, que é o estilo preferido. O senhor também encontrará = para atribuição, embora ele se comporte de maneira ligeiramente diferente em alguns contextos.

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

Seta para a esquerda <- versus sinal de igual =

<- sempre cria uma variável no ambiente atual. = também pode fazer atribuições, mas dentro de chamadas de função ele define argumentos nomeados em vez de criar uma variável. Essa distinção é importante.

# <- creates a variable outside function calls
x <- 42

# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3))  # x is an arg here, not a variable

# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3))  # y is now also in workspace
cat('y was created:', y, '
')

Operador de atribuição à direita ->

R também permite atribuições da direita para a esquerda com ->. Isso atribui o lado esquerdo ao nome à direita. Embora seja válido, raramente é usado na prática, pois reduz a legibilidade.

# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')

# Same as:
# max_score <- 100
# course_name <- 'R Programming'

Atribuição global com <<-

<<- atribui um valor a uma variável no ambiente pai (envolvente), e não no ambiente local da função. Ele é usado dentro de funções para modificar uma variável que existe fora da função.

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

O operador de pertinência %in%

%in% testa se cada elemento à esquerda aparece no vetor à direita. Ele retorna um vetor lógico com o mesmo comprimento do operando esquerdo. Essa é a maneira mais clara de testar pertinência a um conjunto em R.

fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')

# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')

# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')

Filtragem com %in%

%in% é especialmente poderoso quando usado para filtrar vetores ou linhas de quadros de dados. Ele permite selecionar elementos que pertencem a um conjunto predefinido de valores permitidos.

countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126)  # millions

# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')

Multiplicação de matrizes com %*%

%*% realiza a verdadeira multiplicação de matrizes (produto escalar), ao contrário de *, que multiplica elemento a elemento. Para duas matrizes A (m x n) e B (n x p), o resultado é uma matriz (m x p).

A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)

cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)

O pipe nativo |&gt;

Introduzido no R 4.1, o pipe nativo |> passa o resultado da expressão à esquerda como o primeiro argumento da função à direita. Ele torna muito mais legíveis as cadeias de operações.

# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')

# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')

# Reading left to right: take -16, get abs, sqrt, then round

Pipe com vetores

O pipe nativo |> é especialmente útil com vetores e operações numéricas. Você pode encadear transformações sem criar variáveis intermediárias, deixando seu código mais limpo e fácil de acompanhar.

scores <- c(88, 45, 92, 61, 73, 55, 84, 79)

# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')

# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')

Operadores infixos personalizados

R permite definir operadores infixos personalizados usando a sintaxe %name%. É assim que pacotes como dplyr definem o pipe %>%. Você pode criar seus próprios operadores para operações específicas do seu domínio.

# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)

cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')

cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')

Referência rápida de operadores

Aqui está um resumo dos operadores especiais abordados nesta lição:

  • <- — atribuição padrão (preferencial)
  • = — atribuição (também usado para argumentos de funções)
  • <<- — atribuição no ambiente global/pai
  • %in% — teste de pertinência
  • %*% — multiplicação de matrizes
  • |> — pipe nativo (R 4.1+)
  • %name% — sintaxe de operador infixo personalizado
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')

# Demonstrate pipe
1:10 |> mean() |> cat('
')

Verificação rápida

O que o operador %in% retorna quando usado como c(2, 4, 6) %in% c(1, 2, 3)?

Revisão: operadores especiais

Muito bem! Veja os principais aprendizados desta lição:

  • Use <- para atribuições — essa é a convenção do R
  • = funciona para atribuições, mas é ambíguo dentro de chamadas de função
  • <<- modifica uma variável no ambiente pai (global) a partir de dentro de uma função
  • %in% é a maneira mais clara de testar pertinência a um conjunto em R
  • %*% realiza multiplicação de matrizes (não elemento a elemento)
  • O pipe nativo |> (R 4.1+) encadeia chamadas de função da esquerda para a direita, produzindo código legível
  • Os operadores personalizados seguem o padrão %name%
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15

result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')

Perguntas Frequentes

A aula “Atribuição e operadores especiais” é grátis?

Sim — o texto completo de “Atribuição e operadores especiais” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de R Academy, atualize para CoddyKit PRO. O curso de R Academy inclui 4 aulas no total.

O que vou aprender em “Atribuição e operadores especiais”?

Explore >, %in% e o operador de pipe em R. Você pratica R Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar R Academy?

Nenhuma experiência prévia é necessária. R Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Atribuição e operadores especiais”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de R Academy?

Sim. Cada aula de R Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Operadores aritméticos e de comparação
  2. Operadores lógicos e lógica booleana
  3. Atribuição e operadores especiais
  4. Precedência de operadores e expressões complexas
← Voltar para R Academy