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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:50:25