R语言报错‘Error in if (cc < ep) { : missing value where TRUE/FALSE needed’求助
R代码逐行执行正常但source运行报错的排查与解决
问题描述
我编写的R代码逐行执行无逻辑错误,但使用source()运行时持续报错:
Error in if (cc < ep) { : missing value where TRUE/FALSE needed
涉事代码如下:
iteration =function(f, x_0, ep=1e-5, it_max=1000){ index <- 0 k <- 1 # k while(k <= it_max){ x_1 <- f(x_0) cc <- abs(x_1 - x_0) x_0 <- x_1 if(cc < ep) { index <- 1 break } k <- k + 1 } list(root=x_0, it_num=k, index=index) } funs <- function(x) {(1 - 4 * x)^(1/3)} iteration(funs, 0.2)
原因分析
核心问题是代码中的赋值符号被错误替换成了HTML转义字符<-,而非R语言标准的赋值符号<-:
- 逐行执行时,你可能手动将
<-修正为<-,因此代码能正常运行; - 使用
source()运行时,代码会被直接读取执行,<-会被R解析为比较操作(例如index < -0),导致变量index、k、x_1等未被正确赋值,后续计算中cc会变成NA,触发if判断时的逻辑错误(NA无法作为TRUE/FALSE值参与条件判断)。
解决方案
将代码中所有的<-替换为R标准赋值符号<-,修正后的代码如下:
iteration <- function(f, x_0, ep=1e-5, it_max=1000){ index <- 0 k <- 1 # k while(k <= it_max){ x_1 <- f(x_0) cc <- abs(x_1 - x_0) x_0 <- x_1 if(cc < ep) { index <- 1 break } k <- k + 1 } list(root=x_0, it_num=k, index=index) } funs <- function(x) {(1 - 4 * x)^(1/3)} iteration(funs, 0.2)
修正后再使用source()运行即可正常执行。
内容的提问来源于stack exchange,提问作者user257122
相关产品推荐
相关产品推荐

