如何在 r 中修复:条件长度 > 1 并且仅使用第一个元素


在 R 中您可能遇到的错误是:

 Warning message:
In if (x > 1) {:
  the condition has length > 1 and only the first element will be used 

当您尝试使用if()函数检查条件,但将向量而不是单个元素传递给if()函数时,会出现此错误。

本教程准确解释了如何修复此错误。

如何重现错误

假设我们在 R 中有以下向量:

 #define data
x <- c(2, 3, 1, 1, 5, 7)

现在假设我们尝试使用if()函数来检查向量 x 的每个值是否大于 1,然后将这些值乘以 2:

 #if value in vector x is greater than 1, multiply it by 2
if (x>1) {
  x*2
}

Warning message:
In if (x > 1) {:
  the condition has length > 1 and only the first element will be used

我们收到一条警告消息,因为我们向if()语句传递了一个向量。

if()语句一次只能检查向量的一个元素,但使用此代码我们尝试一次检查向量的每个元素。

如何修复错误

修复此错误的最简单方法是使用ifelse()函数:

 #if value in vector x is greater than 1, multiply it by 2
ifelse(x>1, x*2, x)

[1] 4 6 1 1 10 14

默认情况下, ifelse()函数一一检查向量的每个元素。这使我们能够避免之前遇到的错误。

以下是ifelse()函数如何产生它产生的输出值:

  • 第一个元素 (2) 大于 1,因此我们将其乘以 2 得到 2*2 = 4
  • 第二个元素 (3) 大于 1,因此我们将其乘以 2 得到 3*2 = 6
  • 第三个元素 (1) 不大于 1,因此我们保持原样: 1
  • 第四个元素 (1) 不大于 1,因此我们保持原样: 1

等等。

相关:如何在 R 中编写嵌套 For 循环

其他资源

以下教程解释了如何解决 R 中的其他常见错误:

如何在 R 中修复:强制引入的 NA
如何在 R 中修复:dim(X) 必须具有正长度
如何在 R 中修复:名称与以前的名称不匹配
如何在R中修复:较长物体的长度不是较短物体长度的倍数
如何在 R 中修复:对比只能应用于具有 2 个或更多级别的因子

添加评论

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