Como consertar em r: o argumento não é numérico nem lógico: return na


Um aviso que você pode encontrar no R é:

 Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

Este aviso ocorre ao tentar calcular a média de um objeto em R que não é numérico nem lógico.

Este tutorial explica exatamente como lidar com esse aviso na prática.

Como reproduzir o aviso

Suponha que criemos o seguinte quadro de dados em R:

 #create data frame
df <- data. frame (team=c('A', 'B', 'C', 'D', 'E'),
                 points=c(99, 90, 86, 88, 95),
                 assists=c(33, 28, 31, 39, 34),
                 rebounds=c(30, 28, 24, 24, 28))

#view data frame
df

  team points assists rebounds
1 A 99 33 30
2 B 90 28 28
3 C 86 31 24
4 D 88 39 24
5 E 95 34 28

Se tentarmos calcular a média de uma coluna de caracteres ou se tentarmos calcular a média de todo o quadro de dados, receberemos um aviso:

 #attempt to calculate mean of character column
mean(df$team)

Warning message:
In mean.default(df$team): argument is not numeric or logical: returning NA

#attempt to calculate mean of entire data frame
mean(df)

Warning message:
In mean.default(df): argument is not numeric or logical: returning NA

A função Mean() aceita apenas um vetor numérico como argumento, e é por isso que recebemos um aviso em ambos os cenários.

Como lidar com o aviso

A maneira de lidar com esse aviso é usar a função Mean() apenas com vetores numéricos.

Por exemplo, poderíamos calcular a média da coluna de pontos, pois é numérica:

 #calculate mean of points column
mean(df$points)

[1] 91.6

Ou poderíamos usar a função sapply() para calcular a média de cada coluna no quadro de dados:

 #calculate mean of every column in data frame
sapply(df, mean, 2)

    team points assists rebounds 
      NA 90 33 28 

Warning message:
In mean.default(X[[i]], ...):
  argument is not numeric or logical: returning NA

Conseguimos calcular a média de cada coluna numérica, mas ainda recebemos uma mensagem de aviso porque tentamos calcular a média da coluna de caracteres “equipe”.

Para evitar completamente esse aviso, poderíamos usar a função sapply() apenas com as três colunas numéricas:

 #calculate mean of each numeric column
sapply(df[c(' points ', ' assists ', ' rebounds ')], mean, 2)
  points assists rebounds 
      90 33 28

Observe que a média de cada coluna numérica é exibida com sucesso e não recebemos nenhuma mensagem de aviso.

Recursos adicionais

Os tutoriais a seguir explicam como corrigir outros erros comuns no R:

Como corrigir: a condição tem comprimento > 1 e apenas o primeiro elemento será usado
Como corrigir: argumento não numérico do operador binário
Como corrigir: dim(X) deve ter um comprimento positivo
Como corrigir: erro ao selecionar argumentos não utilizados

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *