构建STAN模型时出现Sys.setenv参数长度错误的原因排查
报错原因
该报错与Stan模型语法、RTools匹配度无直接关联,是Rstan 2.21.5版本在R 4.2.0及以上Windows环境下的已知兼容缺陷:
R 4.2.0版本调整了Sys.setenv()函数的参数校验规则,要求传入的环境变量值必须为长度1的字符向量;而Rstan 2.21.5在编译模型前的环境初始化逻辑中,错误地向R_MAKEVARS_USER参数传入了长度为0的NULL值,直接触发参数长度不匹配的报错。
解决方法
按优先级选择以下任意一种方案即可:
- 临时会话修复
在加载rstan包之前,手动将R_MAKEVARS_USER设置为空字符串占位,覆盖包内部的错误传参,示例代码如下:
该方法仅对当前R会话生效,重启R后需要重新执行环境变量设置语句。# 需在加载rstan前运行 Sys.setenv(R_MAKEVARS_USER = "") library(rstan) options(mc.cores=4) N=100 x = rbeta(N, 0.9, 0.9) model = stan_model('D:\\my\\directory\\beta_fit.stan') input_data = list(N=N, x=x) fit = sampling(model, input_data, iter=200, chains=4) - 永久修复(推荐)
将Rstan升级至2.26及以上的正式CRAN版本,新版本已修复该R 4.2+兼容问题,无需额外配置。升级操作步骤:关闭所有打开的R会话,以管理员身份启动R,运行以下命令完成安装,安装结束后重启R即可正常使用:install.packages("rstan") - 固定版本永久修复
如果需要保留Rstan 2.21.5版本不升级,可以在R用户根目录下找到(或新建).Rprofile配置文件,在文件内写入Sys.setenv(R_MAKEVARS_USER = "")并保存,后续每次启动R都会自动加载该配置,无需手动输入环境变量设置语句。
补充校验
修复后如果仍出现编译相关报错,可在R控制台运行Sys.which("make")校验RTools配置,若返回包含make.exe的完整RTools安装路径,即说明编译环境配置正常,你提供的Stan模型代码本身语法无错误,无需调整。
内容的提问来源于stack exchange,提问作者Max Candocia
相关产品推荐
相关产品推荐

