如何修复:结果中的行数不是向量长度(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 中的其他常见错误:

如何在 R 中修复:参数涉及不同的行数
如何修复 R:选择未使用的参数时出错
如何在 R 中修复:替换长度为零

添加评论

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