如何修复:结果中的行数不是向量长度(arg 1)的倍数
使用 R 时可能会遇到的警告消息是:
Warning message: In cbind(A, B, C): number of rows of result is not a multiple of vector length (arg 1)
当您尝试使用cbind()函数将不同长度的向量的列绑定在一起时,通常会出现此警告。
需要注意的是,这条消息只是一个警告,您的代码将继续运行,但您得到的结果可能与您预期的不同。
以下示例展示了如何在实践中避免此警告。
如何重现警告
假设我们使用cbind()函数将三个向量绑定到数据框中的列中:
#define three vectors with different lengths
A = c(4, 2, 3, 6)
B = c(9, 1, 8, 7, 0, 7)
C = c(3, 5, 3, 3, 6, 4)
#column bind three vectors into data frame
df <- cbind(A, B, C)
#view data frame
df
Warning message:
In cbind(A, B, C):
number of rows of result is not a multiple of vector length (arg 1)
ABC
[1,] 4 9 3
[2,] 2 1 5
[3,] 3 8 3
[4,] 6 7 3
[5,] 4 0 6
[6,] 2 7 4
cbind函数适用于所有三个向量,但请注意,第一个向量的值只是一遍又一遍地重复。
这在 R 中称为“回收”。
如何避免警告
为了完全避免这个警告,我们需要确保我们使用的每个向量的长度是相同的。
实现此目的的一种方法是用 NA 值填充最短向量中的缺失值,如下所示:
#calculate max length of vectors
max_length <- max(length(A), length(B), length(C))
#set length of each vector equal to max length
length(A) <- max_length
length(B) <- max_length
length(C) <- max_length
#cbind the three vectors together into a data frame
df <- cbind(A, B, C)
#view data frame
df
ABC
[1,] 4 9 3
[2,] 2 1 5
[3,] 3 8 3
[4,] 6 7 3
[5,] NA 0 6
[6,] NA 7 4
请注意,这次我们没有收到任何警告消息,并且短向量值只是用 NA 值填充,以确保我们使用的三个向量中的每一个都具有相等的长度。
其他资源
以下教程解释了如何修复 R 中的其他常见错误: