如何将psych包因子分析结果格式化为表格?fa2latex函数缺失问题
关于psych包变动与PCA结果导出的解决方案
一、psych包的函数变动
fa2latex确实在psych包的新版本中被移除,目前CRAN官方文档仅保留df2latex。若需生成因子分析的LaTeX代码,可通过df2latex配合提取因子分析关键数据实现,或借助xtable等第三方包辅助转换。
二、PCA结果导出的现成实现方案
无需自行编写代码的话,这些工具可直接满足需求:
- psych包自带输出扩展:用
print(pca1, cut=0.3, digits=3)可直接输出包含公因子方差、因子载荷的结果,再通过capture.output导出后整理格式。 papaja包:专为学术文档设计,支持将psych的PCA/因子分析结果转换为APA格式表格,可导出为LaTeX、Word等格式,自动包含项目名、公因子方差等统计量。gt包:与flextable功能类似,语法更简洁,可直接提取PCA结果的载荷、公因子方差等数据,快速生成规范表格并导出。
三、改进你的现有代码(添加项目名前置、公因子方差)
针对你编写的psychSave函数,修改后实现所需功能:
library(psych) library(flextable) data("Thurstone") pca1 <- principal(Thurstone, nfactors=2, rotate="varimax") psychSave <- function(x, cut=0.3, format="html", path){ # 提取载荷矩阵并排序 loadings_df <- data.frame(fa.sort(x$loadings)) # 应用载荷截断规则,保留3位小数 loadings_df <- apply(loadings_df, 2, function(z) { ifelse(abs(z) < cut, NA, round(z, 3)) }) %>% as.data.frame() # 前置项目名列 loadings_df <- cbind(Name = rownames(loadings_df), loadings_df) # 添加公因子方差列 loadings_df$Communality <- round(x$communality, 3) # 重置行名避免冗余 rownames(loadings_df) <- NULL # 转换为flextable并设置表头标签 ft <- flextable(loadings_df) %>% set_header_labels(Name = "项目", Communality = "公因子方差") %>% autofit() # 导出指定格式文件 if(format == "html") { save_as_html(ft, path = path) } else if(format == "docx") { save_as_docx(ft, path = path) } } # 调用示例 psychSave(pca1, format="html", path="~/Desktop/test.html")
修改说明:
- 通过
cbind将项目名直接前置到数据框最左侧 - 提取PCA结果中的
$communality添加为独立列 - 优化载荷值的小数位数显示
- 自定义表头中文标签(可按需修改)
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

