You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 &lt;- 0
  k &lt;- 1 # k
  while(k &lt;= it_max){
    x_1 &lt;- f(x_0)
    cc &lt;- abs(x_1 - x_0)
    x_0 &lt;- x_1
    if(cc &lt; ep) {
      index &lt;- 1
      break
    }
    k &lt;- k + 1
  }
list(root=x_0, it_num=k, index=index)
}

funs &lt;- function(x) {(1 - 4 * x)^(1/3)}
iteration(funs, 0.2)

原因分析

核心问题是代码中的赋值符号被错误替换成了HTML转义字符&lt;-,而非R语言标准的赋值符号<-:

  • 逐行执行时,你可能手动将&lt;-修正为<-,因此代码能正常运行;
  • 使用source()运行时,代码会被直接读取执行,&lt;-会被R解析为比较操作(例如index < -0),导致变量index、k、x_1等未被正确赋值,后续计算中cc会变成NA,触发if判断时的逻辑错误(NA无法作为TRUE/FALSE值参与条件判断)。

解决方案

将代码中所有的&lt;-替换为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:01:19