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

R语言CFA代码报错Error in file(file, "r") : cannot open the connection求助

问题排查与解决方法

核心报错原因

你调用的是sem包的cfa()函数,而非CFA分析常用的lavaan包的cfa()函数。sem包的cfa()要求第一个参数是模型文件的路径,但你传入的是字符串格式的模型公式,它会将这个字符串当作文件名尝试读取,因此触发了无法打开文件连接的报错。

分步解决方法

1. 切换到lavaan包的cfa()函数

lavaan是CFA分析的标准工具,支持直接传入字符串模型公式。执行以下操作:

  • 卸载已加载的sem包(避免函数冲突):
    detach("package:sem", unload = TRUE)
    
  • 安装并加载lavaan包:
    install.packages("lavaan") # 未安装时运行
    library(lavaan)
    

2. 修正模型公式语法

你的当前模型将所有项目都归到了General单个因子下,不符合“三因子”CFA的需求。正确的三因子模型写法如下:

three_factor_groups <- 
  'Machiavellianism =~ Machiavellianism1 + Machiavellianism2 + Machiavellianism3 + Machiavellianism4 + Machiavellianism5 + Machiavellianism6 + Machiavellianism7 + Machiavellianism8 + Machiavellianism9
   Narcissism =~ Narcissism1 + Narcissism2 + Narcissism3 + Narcissism4 + Narcissism5 + Narcissism6 + Narcissism7 + Narcissism8 + Narcissism9
   Psychopathy =~ Psychopathy1 + Psychopathy2 + Psychopathy3 + Psychopathy4 + Psychopathy5 + Psychopathy6 + Psychopathy7 + Psychopathy8 + Psychopathy9'

3. 验证数据集完整性

  • 确认df3中存在country列,且为分类变量(因子/字符型):
    # 检查country列是否存在
    "country" %in% colnames(df3)
    # 查看分组分布
    table(df3$country)
    
  • 检查所有模型涉及的变量(如Machiavellianism1等)是否存在于df3中,避免拼写错误或缺失列:
    # 列出模型变量
    model_vars <- c(paste0("Machiavellianism", 1:9), paste0("Narcissism", 1:9), paste0("Psychopathy", 1:9))
    # 检查是否都在数据集中
    all(model_vars %in% colnames(df3))
    

4. 清理重复加载的包

简化包加载代码,避免重复加载同一包:

# 统一加载所需包
library(haven)
library(dplyr)
library(vctrs)
library(semTools)
library(psych)
library(readr)
library(lavaan)
library(semPlot)
library(qgraph)

修正后的完整代码示例

# 加载包
library(haven)
library(dplyr)
library(vctrs)
library(semTools)
library(psych)
library(readr)
library(lavaan)
library(semPlot)
library(qgraph)

# 读取并合并数据
NewIrishdata <- read_sav("NewIrishdata.sav")
df3 <- bind_rows(Englishdark, NewIrishdata)

# 定义三因子模型
three_factor_groups <- 
  'Machiavellianism =~ Machiavellianism1 + Machiavellianism2 + Machiavellianism3 + Machiavellianism4 + Machiavellianism5 + Machiavellianism6 + Machiavellianism7 + Machiavellianism8 + Machiavellianism9
   Narcissism =~ Narcissism1 + Narcissism2 + Narcissism3 + Narcissism4 + Narcissism5 + Narcissism6 + Narcissism7 + Narcissism8 + Narcissism9
   Psychopathy =~ Psychopathy1 + Psychopathy2 + Psychopathy3 + Psychopathy4 + Psychopathy5 + Psychopathy6 + Psychopathy7 + Psychopathy8 + Psychopathy9'

# 运行分组CFA
fit_CFA_groups <- cfa(three_factor_groups, data = df3, group = "country")
summary(fit_CFA_groups)

# 绘制路径图
semPaths(fit_CFA_groups, layout='circle', style = "lisrel", what="std", combineGroups = F)

内容的提问来源于stack exchange,提问作者Megan Owen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:00:54