修正方法:randomforest.default(m, y, …): 外部関数呼び出しの na/nan/inf


R で発生する可能性のあるエラーは次のとおりです。

 Error in randomForest.default(m, y, ...): 
  NA/NaN/Inf in foreign function call (arg 1)

このエラーは次の 2 つの理由で発生する可能性があります。

  • データセットに NA、NaN、または Inf 値があります
  • データセット内の変数の 1 つが文字です

このエラーを修正する最も簡単な方法は、データが欠落している行を削除し、文字変数を因子変数に変換することです。

 #remove rows with missing values 
df <- na. omitted (df)

#convert all character variables to factor variables
library (dplyr)
df %>% mutate_if(is. character , as. factor )

このチュートリアルでは、このエラーを実際に修正する方法の例を紹介します。

関連:R でランダム フォレストを作成する方法 (ステップバイステップ)

エラーを再現する方法

R でランダム フォレストを次のデータ フレームに適合させようとしているとします。

 library (randomForest)

#create data frame
df <- data. frame (y <- c(30, 29, 30, 45, 23, 19, 9, 8, 11, 14),
                 x1 <- c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
                 x2 <- c(4, 4, 5, 7, 8, 7, 9, 6, 13, 15))

#attempt to fit random forest model
model <- randomForest(formula = y ~ ., data = df)

Error in randomForest.default(m, y, ...):
  NA/NaN/Inf in foreign function call (arg 1)

x1 はデータ フレーム内の文字変数であるため、エラーが発生します。

これは、 str()関数を使用してデータ フレームの構造を表示することで確認できます。

 str(df)

'data.frame': 10 obs. of 3 variables:
 $ y....c.30..29..30..45: num 30 29 30 45 23 19 9 8 11 14
 $ x1....c..A....A....B....B.... : chr "A" "A" "B" "B"
 $ x2....c.4..4..5..7..: num 4 4 5 7 8 7 9 6 13 15

エラーを修正する方法

このエラーを修正するには、 dplyrmutate_if()関数を使用して、各文字列を因子列に変換します。

 library (dplyr)

#convert each character column to factor
df = df %>% mutate_if(is. character , as. factor )

次に、ランダム フォレスト モデルをデータ フレームに適合させます。

 #fit random forest model
model <- randomForest(formula = y ~ ., data = df)

#view summary of model
model

Call:
 randomForest(formula = y ~ ., data = df) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 65.0047
                    % Var explained: 48.64

データフレームにはこれ以上文字変数がないため、今回はエラーは発生しません。

追加リソース

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

修正方法: 条件の長さが 1 を超えており、最初の要素のみが使用されます。
R での修正方法: dim(X) は正の長さでなければなりません
Rで修正する方法: true/falseが必要な場所に値がありません
修正方法: 強制によって導入された NA

コメントを追加する

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