R运行mle2导出flex表格到Word时报$运算符对原子向量无效错误
问题定位与解决方案
触发的两类异常说明
- mle2拟合阶段多次出现
dbinom产生NaN的警告 - Word导出阶段触发
$ operator is invalid for atomic vectors错误,伴随caption列未初始化警告,最终输出Word空白
对应解决步骤
1. 修复拟合NaN警告
原因:mle2迭代过程中会临时将pAE/pBD参数更新到0~1的合法概率范围外,导致二项分布概率计算报错。
修改拟合代码,加入参数边界限制:
fit <- mle2( Correct ~ dbinom(size = 10, prob = rep(c(pAE, pBD), each = 23)), start = list(pAE = 0.5, pBD = 0.5), data = wasps, method = "L-BFGS-B", # 支持边界限制的优化算法 lower = c(pAE = 0, pBD = 0), # 参数下限 upper = c(pAE = 1, pBD = 1) # 参数上限 )
2. 修复表格拼接与格式转换问题
原因:body_add_flextable要求传入flextable类对象,直接传入data.frame会触发类型识别错误,同时confint输出的无列明结果可能导致后续解析异常。
修改表格生成代码:
table3 <- wasps %>% group_by(Colors) %>% summarize(n=n()) %>% bind_cols( Estimate = coef(fit), SE = stdEr(fit), # 重命名置信区间列,避免无列明导致的解析错误 setNames(as.data.frame(confint(fit)), c("2.5% 置信区间", "97.5% 置信区间")) ) # 将数据框转为flextable支持的对象 ft_table3 <- flextable(table3)
3. 修复Word导出逻辑
原因:原代码未传入正确的flextable对象,且打印输出参数不明确导致写入中断。
修改导出代码:
tabledoc <- file.choose() read_docx(tabledoc) %>% body_add_par("\n") %>% body_add_par("表3:纸黄蜂Polistes dominula在非熟悉刺激的传递性推断试验中的正确选择比例(置信区间基于似然剖面法计算)") %>% body_add_par("\n") %>% body_add_flextable(ft_table3) %>% print(target = tabledoc) # 明确指定输出路径参数 shell.exec(tabledoc)
内容的提问来源于stack exchange,提问作者Antonio Verzotto
相关产品推荐
相关产品推荐

