R での修復方法: 置換の長さはゼロです


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

 Error in x[1] = x[0]: replacement has length zero

このエラーは、ベクトル内の値を「長さがゼロ」、つまり存在しない別の値に置き換えようとしたときに発生します。

このチュートリアルでは、このエラーを修正する方法を正確に説明します。

エラーを再現する方法

R に 10 個の値を含む次のベクトルを作成するとします。

 data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)

ここで、次のfor()ループを使用して、ベクトル内の各値をその前の値で乗算しようとするとします。

 for (i in 1: length (data)) {
  data[i] = data[i] * data[i-1]
}

Error in data[i] <- data[i] * data[i - 1]: replacement has length zero

最初のループで次の乗算を実行しようとしているため、「置換の長さはゼロです」というエラーが発生します。

  • データ[1] * データ[0]

R インデックスは 1 から始まるため、 data[0]値は単に存在しません。

これは、ベクトルの位置 0 にある値を出力してみることで確認できます。

 print (data[0])

numeric(0)

結果は長さ 0 のデジタル ベクトルになります。つまり、存在しません。

エラーを修正する方法

このエラーを修正する方法は、存在しないベクトルの値へのアクセスを試行しないfor()ループを使用することです。

この例では、インデックス位置 1 ではなくインデックス位置 2 で for ループを開始することで、このエラーを修正できます。

 for (i in 2: length (data)) {
  data[i] = data[i] * data[i-1]
}

#view updated vector
data

 [1] 1 4 20 100 700 6300 75600
 [8] 1058400 15876000 269892000

ベクトル内の存在しないインデックス位置にアクセスしようとしたことはないため、エラーは発生しないことに注意してください。

追加リソース

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

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

コメントを追加する

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