使用ChoiceModelR估计分层贝叶斯选择模型时遇directory参数缺失报错
解决ChoiceModelR包
choicemodelr()函数的"directory参数缺失"报错 在使用ChoiceModelR包估计分层贝叶斯选择模型时,其余代码段运行正常,但执行hb.post相关语句时触发报错:
Error in `choicemodelr()`: ! argument "directory" is missing, with no default Backtrace: 1. ChoiceModelR::choicemodelr(...) 3. base::paste(directory, "/", "RLog.txt", sep = "") Execution halted Warning message: In sink() : no sink to remove
问题代码
choice <- rep(0, nrow(cbc.df)) choice[cbc.df[,"alt"]==1] <- cbc.df[cbc.df[,"choice"]==1,"alt"] head(choice) cbc.coded <- model.matrix(~ cereal_label + bill + quantity + price, data = cbc.df) cbc.coded <- cbc.coded[, -1] # remove the intercept choicemodelr.data <- cbind(cbc.df[,1:3], cbc.coded, choice) head(choicemodelr.data) cerealpool <- cbc.df$cerealpool[cbc.df$ques==1 & cbc.df$alt==1]=="yes" cerealpool <- as.numeric(cerealpool) choicemodelr.demos <- as.matrix(cerealpool, nrow=length(cerealpool)) str(choicemodelr.demos) library(ChoiceModelR) hb.post <- choicemodelr(data=choicemodelr.data, xcoding=rep(1, 7), demos=choicemodelr.demos, mcmc=list(R=20000, use=10000), options=list(save=TRUE)) names(hb.post)
解决方案
- 报错原因:当设置
options=list(save=TRUE)时,choicemodelr()函数需要通过directory参数指定保存MCMC输出文件(如RLog.txt)的路径,该参数无默认值,必须手动传入。 - 两种解决方式:
- 指定保存目录:
- 先确认目标目录,可通过
getwd()查看当前工作目录,或自定义路径(如"~/cmr_results");若目录不存在,需先创建:dir.create("~/cmr_results", recursive=TRUE) - 在函数调用中添加
directory参数:hb.post <- choicemodelr(data=choicemodelr.data, xcoding=rep(1, 7), demos=choicemodelr.demos, mcmc=list(R=20000, use=10000), options=list(save=TRUE), directory = getwd()) # 或替换为自定义路径
- 先确认目标目录,可通过
- 关闭保存功能:
- 若不需要保存输出文件,将
options=list(save=TRUE)修改为options=list(save=FALSE),此时无需传入directory参数:hb.post <- choicemodelr(data=choicemodelr.data, xcoding=rep(1, 7), demos=choicemodelr.demos, mcmc=list(R=20000, use=10000), options=list(save=FALSE))
- 若不需要保存输出文件,将
- 指定保存目录:
内容的提问来源于stack exchange,提问作者Constanza Avalos
相关产品推荐
相关产品推荐

