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

在R函数中使用expression()出现'object not found'错误的技术问询

问题原因

expression()创建的是未求值的表达式,当sde.sim计算漂移项和扩散项时,默认会去全局环境找r、a、K这些变量,但你函数里的这些参数都是局部变量,只在函数内部的环境里存在,全局环境没有,所以才会报找不到对象的错误。

而你在函数外直接运行时,变量是定义在全局环境的,sde.sim自然能找到,所以运行正常。

修复方法

给你三种可行的修复方式:

方式1:指定sde.sim的环境参数

调用sde.sim时,明确告诉它去函数的局部环境找变量,添加envir = environment()参数即可:

library(sde)

myfunction <- function(r,a,K,vi){
  set.seed(123)
  d <- expression(r*x*(K-x))
  s <- expression(a*x*(K-x))
  X <- sde.sim(X0=1, drift=d, sigma=s, M=3, envir = environment())
  plot(X, main="Multiple")
}

方式2:用substitute把变量值代入表达式

提前把r、a、K的实际值替换到表达式里,这样表达式就不需要再找外部变量了:

library(sde)

myfunction <- function(r,a,K,vi){
  set.seed(123)
  d <- substitute(r*x*(K-x), list(r=r, K=K))
  s <- substitute(a*x*(K-x), list(a=a, K=K))
  X <- sde.sim(X0=1, drift=d, sigma=s, M=3)
  plot(X, main="Multiple")
}

方式3:用with包裹调用

通过with让sde.sim在函数的局部环境里执行:

library(sde)

myfunction <- function(r,a,K,vi){
  set.seed(123)
  d <- expression(r*x*(K-x))
  s <- expression(a*x*(K-x))
  X <- with(environment(), sde.sim(X0=1, drift=d, sigma=s, M=3))
  plot(X, main="Multiple")
}

调用测试:myfunction(r=0.5,a=0.35,K=100,vi=1),就能正常生成模拟结果并绘图了。

内容的提问来源于stack exchange,提问作者José

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:10:21