R で修正する方法: 引数が数値でも論理でもない: na を返す


R で発生する可能性のある警告は次のとおりです。

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

この警告は、R で数値でも論理でもないオブジェクトを平均しようとすると発生します。

このチュートリアルでは、この警告を実際に処理する方法を正確に説明します。

警告を再現する方法

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

文字の列を平均しようとしたり、データ フレーム全体を平均しようとすると、警告が表示されます。

 #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

Mean()関数は引数として数値ベクトルのみを取るため、両方のシナリオで警告が表示されます。

警告の対処方法

この警告に対処する方法は、数値ベクトルを指定したMean()関数のみを使用することです。

たとえば、ポイント列は数値であるため、その平均を計算できます。

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

[1] 91.6

または、 sapply()関数を使用して、データ フレーム内の各列の平均を計算することもできます。

 #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

各数値列の平均を計算することはできますが、「チーム」文字列の平均を計算しようとしたため、依然として警告メッセージが表示されます。

この警告を完全に回避するには、3 つの数値列のみを指定してsapply()関数を使用します。

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

各数値列の平均は正常に表示され、警告メッセージは表示されないことに注意してください。

追加リソース

次のチュートリアルでは、R の他の一般的なエラーを修正する方法について説明します。

修正方法: 条件の長さが 1 を超えており、最初の要素のみが使用されます。
修正方法: 二項演算子の数値以外の引数
修正方法: dim(X) は正の長さでなければなりません
修正方法: 未使用の引数を選択する際のエラー

コメントを追加する

メールアドレスが公開されることはありません。 が付いている欄は必須項目です