如何解决:较长的对象长度不是较短对象长度的倍数


您在 R 中可能遇到的常见警告消息是:

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

当您尝试对两个或多个长度不同的向量执行操作时,会出现此警告消息。

本教程分享了可用于解决此警告消息的确切步骤。

如何重现警告消息

假设我们将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

所得向量显示每个向量中对应值的总和。

我们没有收到任何警告消息,因为两个向量的长度相同。

但是,假设第二个向量的值比第一个向量少一个:

 #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

由于两个向量的长度不同,我们得到较长的对象长度不是较短的对象长度警告消息的倍数

值得注意的是,R 始终通过将第一个向量 (5) 的最后一个值与第二个向量 (6) 的第一个值相加来强制计算进行,以获得最终值11

如果我们不知道每个向量的长度,我们可以使用length()函数来找出:

 #display length of vector a
length(a)

[1] 5

#display length of vector b
length(b)

[1] 4

我们看到第一个向量有5个值,而第二个向量只有4个值。这就是我们收到警告消息的原因。

如何修复警告消息

要修复此警告消息,我们只需确保两个向量的长度相同即可。

例如,如果我们知道向量 ba 比向量 a 少一个值,那么我们可以简单地在向量 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

在大多数情况下,我们实际上并不知道两个向量之间的长度差异,因此我们可以使用以下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

警告消息消失是因为我们在向量 b 的末尾添加了足够的零以确保两个向量的长度相同。

其他资源

以下教程解释了如何解决 R 中的其他常见错误:

如何在 R 中修复:名称与以前的名称不匹配
如何在 R 中修复:强制引入的 NA
如何在 R 中修复:索引越界
如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子

添加评论

您的邮箱地址不会被公开。 必填项已用 * 标注