如何在 r 中修复:替换长度为零
在 R 中您可能遇到的错误是:
Error in x[1] = x[0]: replacement has length zero
当您尝试用另一个“长度为零”(意味着该值不存在)的值替换向量中的值时,会发生此错误。
本教程准确解释了如何修复此错误。
如何重现错误
假设我们在 R 中创建以下具有 10 个值的向量:
data = c(1, 4, 5, 5, 7, 9, 12, 14, 15, 17)
现在假设我们尝试使用以下for()循环将向量中的每个值与其前面的值相乘:
for (i in 1: length (data)) {
data[i] = data[i] * data[i-1]
}
Error in data[i] <- data[i] * data[i - 1]: replacement has length zero
我们收到错误“替换长度为零”,因为在第一个循环中我们尝试执行以下乘法:
- 数据[1] * 数据[0]
由于 R 索引从 1 开始,因此 data[0]值根本不存在。
我们可以通过尝试打印向量中位置 0 处的值来检查这一点:
print (data[0])
numeric(0)
结果是一个长度为 0 的数字向量——换句话说,它不存在。
如何修复错误
修复此错误的方法是简单地使用for()循环,该循环不会尝试访问不存在的向量值。
在我们的示例中,我们可以通过在索引位置 2 而不是位置 1 处启动 for 循环来纠正此错误:
for (i in 2: length (data)) {
data[i] = data[i] * data[i-1]
}
#view updated vector
data
[1] 1 4 20 100 700 6300 75600
[8] 1058400 15876000 269892000
请注意,我们没有收到错误,因为我们从未尝试访问向量中不存在的索引位置。
其他资源
以下教程解释了如何修复 R 中的其他常见错误:
如何修复:条件长度 > 1 并且仅使用第一个元素
如何修复:替换有 X 行,数据有 Y
如何修复:二元运算符的非数字参数
如何解决:dim(X) 必须具有正长度
如何修复:选择未使用的参数时出错