修正方法: 長いオブジェクトの長さは、短いオブジェクトの長さの倍数ではありません。


R で発生する可能性のある一般的な警告メッセージは次のとおりです。

 Warning message:
In a + b: longer object length is not a multiple of shorter object length

この警告メッセージは、長さが同じではない 2 つ以上のベクトルに対して演算を実行しようとすると表示されます。

このチュートリアルでは、この警告メッセージを解決するために使用できる正確な手順を共有します。

警告メッセージを再現する方法

次の 2 つのベクトルの値を R に追加するとします。

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9, 10)

#add the two vectors
a+b

[1] 7 9 11 13 15

結果のベクトルは、各ベクトルの対応する値の合計を示します。

2 つのベクトルは同じ長さであるため、警告メッセージは受信されませんでした。

ただし、2 番目のベクトルの値が最初のベクトルより 1 つ少ないとします。

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9)

#add the two vectors
a+b

[1] 7 9 11 13 11

Warning message:
In a + b: longer object length is not a multiple of shorter object length

2 つのベクトルの長さが異なるため、長いオブジェクトの長さは短いオブジェクトの長さの警告メッセージの倍数ではないことがわかります。

R は常に、最初のベクトルの最後の値 (5) と 2 番目のベクトルの最初の値 (6) を加算して最終値11を取得する計算を強制することに注意することが重要です。

各ベクトルの長さがわからない場合は、 length()関数を使用して調べることができます。

 #display length of vector a
length(a)

[1] 5

#display length of vector b
length(b)

[1] 4

最初のベクトルには 5 つの値があるのに対し、2 番目のベクトルには 4 つの値しかないことがわかります。このため、警告メッセージが表示されます。

警告メッセージを修正する方法

この警告メッセージを修正するには、両方のベクトルが同じ長さであることを確認するだけです。

たとえば、ベクトル ba がベクトル a よりも 1 つ小さい値であることがわかっている場合は、ベクトル b の末尾にゼロを追加するだけです

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7, 8, 9)

#add zero to the end of vector b
b <- c(b, 0)

#add the two vectors
a+b

[1] 7 9 11 13 5

ほとんどの場合、実際には 2 つのベクトルの長さの違いがわからないため、次のfor ループを使用して、短い方のベクトルの末尾に正しい数のゼロを追加できます。

 #define two vectors
a <- c(1, 2, 3, 4, 5)
b <- c(6, 7)

#add zeros to the end of vector b
for (i in (( length (b)+1): length (a)))
  +{b = c(b, 0)}

#add the two vectors
a+b

[1] 7 9 11 13 5

2 つのベクトルが同じ長さになるようにベクトル b の末尾に十分なゼロを追加したため、警告メッセージは消えます。

追加リソース

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

R での修正方法: 名前が以前の名前と一致しない
R で修正する方法: 強制によって導入された NA
R で修復する方法: 範囲外のインデックス
R での修正方法: コントラストは 2 レベル以上の因子にのみ適用できます。

コメントを追加する

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