在这段代码中:
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
这么简单。
发生了什么事?
答案 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;。