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