Pular para o conteúdo principal

Como corrigir o erro de argumento não numérico para operador binário no R

O argumento não numérico para o erro do operador binário no R ocorre quando você tenta fazer aritmética em dados não numéricos, como uma cadeia de caracteres ou um fator.
Actualizado 30 de jul. de 2024  · 8 min de leitura

Você pode ter encontrado esse erro ao programar no R: Error: non-numeric argument to binary operator. Isso pode ocorrer quando você executa uma operação matemática em dados que contêm valores não numéricos, como cadeias de caracteres ou caracteres.

Neste tutorial, orientarei você sobre como lidar com esse erro e corrigi-lo. Primeiro, darei uma resposta curta e, em seguida, me aprofundarei para que você possa entender melhor por que esse erro ocorre.

A resposta curta: Como corrigir o erro de argumento não numérico para operador binário no R

Para quem tem pressa, a correção do erro de argumento não numérico para operador binário no R envolve a conversão de dados para tipos numéricos antes de realizar operações aritméticas. Esse método garante que todos os elementos em seus dados sejam adequados para cálculos matemáticos.

No exemplo a seguir, a função as.numeric() converte diretamente o vetor characters em numérico, garantindo que a operação de adição seja realizada sem erros.

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Por que o erro ocorre

No R, as operações aritméticas são projetadas para trabalhar com tipos de dados numéricos. Quando você encontra o argumento não numérico para o erro de operador binário, isso normalmente indica o uso indevido de operadores aritméticos com tipos de dados não numéricos, como cadeias de caracteres ou fatores. Para saber mais sobre os tipos de dados do R, leia nosso tutorial Tipos de dados no R.

Isso pode ocorrer em vários cenários comuns:

  • Operações em cadeias de caracteres: O erro pode ocorrer ao tentar executar aritmética em dados de texto.
  • Operações em tipos de dados de fator: O erro ocorre quando o R converte cadeias de caracteres em fatores dentro de quadros de dados, especialmente ao importar dados, levando a tipos não numéricos não intencionais.
  • Operações em listas ou outras estruturas complexas: O erro também ocorre quando você usa operadores aritméticos em listas ou estruturas semelhantes inadequadas para essas operações.

Como reproduzir e corrigir o erro

Vamos criar um conjunto de dados simples e executar operações que acionem intencionalmente esse erro para ilustrar como ele pode ocorrer. Em seguida, corrigiremos o erro em cada caso.

Como reproduzir e corrigir o erro para cadeias de caracteres

Em nosso primeiro exemplo, vemos essa mensagem de erro porque os elementos do vetor characters não são do tipo numérico, mas sim cadeias de caracteres.

characters <- c("5", "10", "15")

result <- characters + 10

print(result)

Para corrigir isso, convertemos para numérico usando as.numeric():

characters <- c("5", "10", "15")

characters <- as.numeric(characters)

result <- characters + 10

print(result)

Como reproduzir e corrigir o erro por fatores

Em nosso próximo exemplo, reproduziremos o erro para os fatores.

factors <- factor(c("5", "10", "15"))

result <- factors + 10

print(result)

Para corrigir isso, convertemos para numérico primeiro convertendo para caractere. Fazemos isso porque, no R, os fatores são armazenados como vetores inteiros com um conjunto correspondente de níveis de caracteres.

Quando você converte um fator diretamente em numérico usando as.numeric(), o R retorna os códigos inteiros subjacentes, que são a representação interna de números inteiros dos níveis do fator, em vez dos valores reais dos caracteres. A conversão do fator em um caractere primeiro recupera os níveis reais como cadeias de caracteres, que podem então ser corretamente convertidos em valores numéricos.

factors <- factor(c("5", "10", "15"))

factors <- as.numeric(as.character(factors))

result <- factors + 10

print(result)

Como reproduzir e corrigir o erro nas listas

Em nosso próximo exemplo, reproduziremos o erro para listas. 

list_data <- list("5", "10", "15")

result <- list_data + 10

print(result)

Para corrigir isso, extraímos e convertemos os elementos em numéricos. A função unlist() converte a lista em um vetor. 

list_data <- list("5", "10", "15")

list_data <- as.numeric(unlist(list_data))

result <- list_data + 10

print(result)

Como reproduzir e corrigir o erro para tipos de dados mistos

O próximo exemplo é um pouco mais complicado. Nenhuma de nossas técnicas anteriores funcionaria nesse caso, pois encontraríamos "20a" que não pode ser convertido em um valor numérico. 

A função sapply() oferece uma boa solução para esse caso. Ele aplica uma função especificada a cada elemento do nosso vetor. No nosso caso, definimos uma função que tenta converter cada elemento em um valor numérico.

mixed_data <- list("5", 10, "15", "20a")

numeric_data <- sapply(mixed_data, function(x) {
  if (is.numeric(x)) {
    return(x)
  } else if (!is.na(as.numeric(x))) {
    return(as.numeric(x))
  } else {
    return(NA)
  }
})

result <- numeric_data + 10

print(result)

Para obter mais informações sobre programação funcional em R, confira nosso curso Programação funcional intermediária com Rurr. Para saber mais sobre a família de funções apply(), leia nosso Tutorial sobre a família R Apply

Coisas adicionais que você deve saber

Depuração com traceback

Quando ocorre um erro, o site traceback() pode ser uma ferramenta valiosa para a depuração. Ele fornece uma sequência de chamadas que levaram ao erro, ajudando você a identificar o ponto exato da falha.

traceback()

Depois de executar esse comando, o R imprimirá a sequência de chamadas de função que levaram ao erro. Isso pode fornecer informações sobre onde os dados não numéricos podem ter sido introduzidos.

Revisar os métodos de entrada de dados

Talvez você também queira verificar novamente como os dados são importados e garantir que sejam convertidos corretamente. Ao importar dados, especialmente de arquivos CSV, o R pode converter automaticamente dados de caracteres em fatores. É importante controlar esse comportamento para garantir que seus dados sejam importados corretamente.

# Assuming data is read from a CSV incorrectly imported as factors
data <- read.csv("data.csv", stringsAsFactors = TRUE)

data$column <- as.numeric(as.character(data$column))

Neste exemplo, os dados são importados de um arquivo CSV com stringsAsFactors definido como TRUE. Em seguida, convertemos a coluna de fator em um caractere e, posteriormente, em numérico para garantir o tipo de dados adequado para operações aritméticas.

Como evitar o erro

Uso de verificações condicionais

Para ajudar a evitar a ocorrência desse erro, tente implementar verificações condicionais para garantir que os tipos de dados sejam adequados para as operações. Verificar o tipo de dados e tratar as conversões necessárias condicionalmente é uma boa prática antes de executar as operações.

No exemplo a seguir, verificamos se os dados são numéricos. Caso contrário, nós o convertemos em numérico antes de prosseguir com a operação aritmética. Isso captura todos os tipos de dados errados e os converte adequadamente em numéricos. 

data <- "20"

if(is.numeric(data)) {
  result <- data + 10
} else {
  data <- as.numeric(data)
  result <- data + 10
}

print(result)

Exemplo de verificações condicionais

Conclusão e recursos adicionais

Espero que este artigo tenha sido útil para resolver seu problema. Erros como o argumento não numérico para o erro do operador binário são comuns na programação, e saber como lidar com eles é importante. Entender os tipos de dados e as conversões adequadas pode ajudar a evitar a ocorrência desse erro.

Para ajudá-lo com o R, você pode consultar nossas folhas de consulta do R ou nosso curso gratuito de Introdução ao R ou, para obter uma compreensão mais profunda, experimente nosso programa R Programming Skill Track.

Perguntas frequentes

O que é um argumento não numérico?

Um argumento não numérico é um valor ou variável que não pode ser interpretado como um número em uma linguagem de programação como o R.

Como posso identificar esse erro em meu código?

A mensagem de erro geralmente inclui a frase "argumento não numérico", o que facilita a identificação.

Esse erro ocorre somente no R?

Não, esse erro também pode ocorrer em outras linguagens de programação. No entanto, a mensagem de erro pode aparecer de forma diferente.

Existe uma maneira de evitar esse erro?

Sim, assegurando que todos os valores e variáveis em seu código sejam compatíveis com o operador específico que está sendo usado.

Posso usar qualquer tipo de operador com argumentos não numéricos?

Não, alguns operadores só podem ser usados com valores numéricos e resultarão nesse erro se você receber argumentos não numéricos.

Temas

Aprenda R com a DataCamp

curso

Introduction to R

4 hr
2.8M
Master the basics of data analysis in R, including vectors, lists, and data frames, and practice R with real data sets.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

Tutorial de Pipes em R para iniciantes

Saiba mais sobre o famoso operador de pipe %>% e outros pipes no R, por que e como você deve usá-los e quais alternativas você pode considerar!
Karlijn Willems's photo

Karlijn Willems

25 min

tutorial

Regressão linear múltipla no R: Tutorial com exemplos

Uma visão geral completa para entender as regressões lineares múltiplas no R por meio de exemplos.
Zoumana Keita 's photo

Zoumana Keita

12 min

tutorial

Testes T no tutorial do R: Saiba como realizar testes T

Determine se há uma diferença significativa entre as médias dos dois grupos usando t.test() no R.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Como fazer um histograma ggplot2 no R

Aprenda a criar um histograma ggplot2 no R. Crie histogramas no R com base na gramática dos gráficos.

Kevin Babitz

15 min

tutorial

Criação de uma lista no R

Pratique Listas em R usando o material do curso Intro to R do DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

tutorial

Introdução a modelos não lineares e percepções usando o R

Descubra as complexidades dos modelos não lineares em comparação com os modelos lineares. Saiba mais sobre suas aplicações, limitações e como ajustá-las usando conjuntos de dados do mundo real.

Somil Asthana

17 min

See MoreSee More