如何在R中修复:替换的长度为零

1,386 阅读1分钟

你在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

我们收到的错误是 "替换长度为零",因为在第一个循环中我们试图执行以下的乘法:

  • data[1] * data[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,并且只使用第一个元素
如何修复:二进制运算符的非数字参数
如何修复:dim(X)必须有一个正的长度
如何修复:选择未使用参数的错误