如何解决:较长的对象长度不是较短对象长度的倍数
您在 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 个或更多级别的因子