为什么这个if / else错误出现在脚本中但不出现在控制台中?

时间:2016-11-26 09:48:51

标签: r

在这段代码中:

q7 <- function (x) {
  if (is.numeric (x) == FALSE) {stop ("Input is non-numeric.")}
  if (all (x > 0) == FALSE) {stop ("Input has negative values.")}
  sum <- 0
  while (sum <= 100) {
    if (x[1] > 50) {next}
    else if (x[1] %% 2 == 0) {sum <- sum + (x[1] / 2)}
    else {sum <- sum + x[1]}
    x <- x [x[2]:length (x)]
  }
}

例如用作q7 (c(10,20,30,40,50,60,70,80,90,100)),我收到此错误:

Error in if (x[1] > 50) { : missing value where TRUE/FALSE needed

我认为这里的条件不能简单,我必须缺少一些R启发式,因为很明显在控制台中;

> x <- c(10,20,30,40,50,60,70,80,90,100)
> x[1] > 50
[1] FALSE

这么简单。
发生了什么事?

2 个答案:

答案 0 :(得分:0)

debug的快速诊断显示问题出在

x <- x[x[2]:length(x)]

在第一次迭代之后,这将是NA的向量。然后在下一次迭代中,当您检查x[1] > 50时,您实际上正在执行NA > 50,因此您会收到错误。

与您核实后,您只想删除x的第一个值。那么为什么不使用

x <- x[-1]

答案 1 :(得分:0)

将x [2]更改为2即可。

x <- x [2:length (x)]

由于&#39; next&#39;声明你将以无限循环结束,因为从x [1] = 60开始,它将继续移动到while循环的下一次迭代(永远)。也许你想使用&#39; break&#39;。