R语言choiceRT_ddm()函数遇逻辑coercion错误求助
解决hBayesDM包choiceRT_ddm()函数的逻辑运算符错误
问题重现
调用choiceRT_ddm()拟合漂移扩散模型时触发如下错误:
Error in is.null(data) || is.na(data) : 'length = 162000' in coercion to 'logical(1)'
已确认数据集无NA值,推测错误源于函数内部使用||运算符处理长度大于1的对象(如数据框),而||仅接受单个逻辑值。
可复现错误的代码:
install.packages("hBayesDM") library(hBayesDM) # 创建30个被试,每个被试1800试次的ID subjID <- rep(1:30, each = 1800) # 生成随机选择(1或2) choice <- sample(1:2, size = 1800 * 30, replace = TRUE) # 生成随机反应时(秒) RT <- runif(1800 * 30, min = 0, max = 2) # 组合为数据框 dummy_df <- data.frame(subjID, choice, RT) # 拟合漂移扩散模型 dmm_fit <- choiceRT_ddm(data = dummy_df, niter = 2000, nwarmup = 1000, nchain = 4, ncore = 4)
解决方法
1. 更新hBayesDM到最新版本
这类语法问题通常会在包的更新版本中修复,执行以下命令更新包后重启R再运行代码:
update.packages("hBayesDM")
2. 修正函数内部的判断逻辑
如果更新后问题仍存在,手动修改函数中出错的判断语句:
- 查看函数源码,定位出错行:
print(choiceRT_ddm) - 找到包含
is.null(data) || is.na(data)的行,将其替换为:
(is.null(data) || any(is.na(data))any(is.na(data))用于正确检查数据框中是否存在NA值,返回单个逻辑值) - 可以通过
trace()函数临时修改函数逻辑,无需重新定义整个函数:
在弹出的编辑器中修改对应行后保存,再重新运行拟合代码。trace(choiceRT_ddm, edit = TRUE)
3. 检查数据格式是否符合函数要求
部分模型对输入数据的格式有严格要求:
- 将
choice列的取值从1/2改为0/1(部分漂移扩散模型要求二进制选择编码):
修改后再尝试拟合模型。dummy_df$choice <- ifelse(dummy_df$choice == 1, 0, 1)
内容的提问来源于stack exchange,提问作者Merle
相关产品推荐
相关产品推荐

