在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é
相关产品推荐
相关产品推荐

