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

使用lavaan包Knit Rmd文档时出现argument is of length zero错误求助

R Markdown Knit报错:Error in if (categorical.flag) ...: ! argument is of length zero

报错详情

Knit Week-4-Assignment_KK.Rmd时,执行第25-90行代码块退出,错误信息:

Error in if (categorical.flag) ...: ! argument is of length zero

回溯显示错误源于lavaan:::print.lavaan.parameterEstimates(x)。

代码重现

options(repos = "https://cloud.r-project.org/")
install.packages("psych")
install.packages("semTools")
install.packages("Amelia")
install.packages("lavaan")
library(psych)
library(semTools)
library(Amelia)
library(lavaan)
data(bfi)

edu3 <- bfi[which(bfi$education == 3),] #only include people with edu = 3
bfi_new <- edu3[, 1:25] #removes all the non BFI item

#define model and order ordinal variables
cfa_mod<-'F1=~E1+E2+E3+E4+E5
F2=~N1+N2+N3+N4+N5
F3=~C1+C2+C3+C4+C5
F4=~O1+O2+O3+O4+O5
F5=~A1+A2+A3+A4+A5'

#do MI after specify SE to be robust and specify ordinal data
out <- cfa.mi(cfa_mod, data = bfi_new, m = 20, seed = 712, se="robust",
               miArgs = list(ordered=c("E1","E2","E3","E4","E5",
                                       "N1","N2","N3","N4","N5",
                                       "O1","O2","O3","O4","O5",
                                       "C1","C2","C3","C4","C5",
                                       "A1","A2","A3","A4","A5")))

#run CFA
summary(out,fit=T, pool = TRUE)
fit <- cfa(cfa_mod, bfi_new)
summary(fit,standardize=T) 

已尝试的解决方法

  • 设置镜像源为https://cloud.r-project.org/
  • 卸载并重装psych、semTools、Amelia、lavaan包
  • 多次重启R

解决方案建议

1. 修正cfa.mi的参数传递逻辑

ordered是lavaan::cfa()的参数,而非Amelia::amelia()的参数,不应放在miArgs列表中。将ordered直接作为cfa.mi的参数传入:

out <- cfa.mi(cfa_mod, data = bfi_new, m = 20, seed = 712, se="robust",
              ordered=c("E1","E2","E3","E4","E5",
                        "N1","N2","N3","N4","N5",
                        "O1","O2","O3","O4","O5",
                        "C1","C2","C3","C4","C5",
                        "A1","A2","A3","A4","A5"))

原代码中ordered被错误传递给amelia(),导致cfa()未识别到有序变量,后续处理时categorical.flag变量未被正确初始化,出现长度为0的错误。

2. 确保变量为因子类型

确认所有指定为有序的变量是因子类型,若为整数需转换:

# 提取所有有序变量名
ordered_vars <- c("E1","E2","E3","E4","E5",
                  "N1","N2","N3","N4","N5",
                  "O1","O2","O3","O4","O5",
                  "C1","C2","C3","C4","C5",
                  "A1","A2","A3","A4","A5")
# 转换为因子
bfi_new[, ordered_vars] <- lapply(bfi_new[, ordered_vars], as.factor)

3. 单独执行多重插补再调用cfa.mi

先手动生成插补数据集,再传入cfa.mi,便于排查插补过程中的问题:

# 生成多重插补数据集
amelia_fit <- amelia(bfi_new, m = 20, seed = 712,
                     ordered = ordered_vars)
# 基于插补数据集运行CFA
out <- cfa.mi(cfa_mod, data = amelia_fit, se = "robust")

4. 更新相关包到最新版本

运行以下命令确保lavaan和semTools为最新稳定版:

update.packages(c("lavaan", "semTools", "Amelia"), ask = FALSE)

内容的提问来源于stack exchange,提问作者Kat.Kabel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 12:33:21