【问题标题】:Error in if (num < 0) { : missing value where TRUE/FALSE neededif (num < 0) { 中的错误:需要 TRUE/FALSE 的缺失值
【发布时间】:2018-06-13 20:40:52
【问题描述】:
y <- as.integer(readline(prompt ="Enter a number: "))
factorial = 1
 if (y< 0){
    print("Error")
 } else if (y== 0) 
 {
     print("1")
 } else
 { 
     for(i in 1:y)  {
            factorial = factorial * i
                    }
      return(factorial)
  }

想知道为什么会这样:

if (y

是不是因为第一行的数据类型为NA_integer?

【问题讨论】:

  • 请使您的示例可重现。你把y 设置成什么?
  • 你没有定义函数所以你不需要返回任何东西,试试把return(factorial)改成factorial
  • @zack 似乎不会导致 if 语句中的错误。
  • @Roman 当我输入一个导致它实际评估该行的值时,它是给我的:Error: no function to return from, jumping to top level。 @seun - 当您运行此代码时,请确保 y 不是 NA,如果您运行 if 语句,它将无法为您提供 TRUE 或 FALSE 值。

标签: r if-statement boolean na missing-data


【解决方案1】:

将值传递给if 语句有三种可能的方式。

y <- 1
if (y > 0) print("more")

这个按预期工作。

y <- 1:3
if (y > 0) print("ignores all but 1st element")

警告信息会告诉您,只有第一个元素用于评估它。您可以使用any 或all 来解决此问题。

y <- NA
if (y > 0) print("your error")

这个案例实际上给了你你的错误。我敢打赌y 在某种程度上是NA。如果您需要更多帮助,您可能需要提供一个可重复的示例(带有数据和整个 shebang)。另请注意,它有助于直观地构建代码以提高可读性。

【讨论】:

  • 这是一个不错的选择。 as.integer 将非数字字符向量转换为 NA
猜你喜欢
  • 2022-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多