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

R语言探索性因子分析:修正提取显著载荷变量函数返回空列表问题

问题:修复R语言探索性因子分析的载荷变量提取函数

我正在使用R进行探索性因子分析(Exploratory Factor Analysis),需要筛选出载荷绝对值≥0.3的变量,将每个因子对应的显著变量名整理成列表。我有多个数据集需要处理,因此希望编写一个以数据集为输入、返回各因子对应变量名列表的函数。

示例数据集

data <- as.data.frame(matrix(c(0.1, 0.2, 0.3, 0.01, 0.02, 0.4, 0.7, 0.2, 0.3, -0.4), nrow = 5, ncol=2))
rownames(data) <- c('A', 'B', 'C', 'D', 'E')
colnames(data) <- c("MR1", "MR2")

print(data)
#    MR1  MR2
# A 0.10  0.4
# B 0.20  0.7
# C 0.30  0.2
# D 0.01  0.3
# E 0.02 -0.4

尝试的函数及问题

我编写了以下函数:

compare.loadings <- function(df) {
  groupings <- sapply(df, function(x) rownames(df)[abs(df[,x]) >= 0.3])
  return(groupings)
}

期望返回结果:

$MR1
[1] "C"

$MR2 
[1] "A" "B" "D" "E"

但实际返回空列表:

$MR1
character(0)

$MR2
character(0)

错误原因分析

使用sapply遍历数据框列时,参数x是当前列的数值向量,而非列名或列索引。原函数中df[,x]的写法完全错误——用数值向量作为列索引会导致无意义的结果,最终无法筛选出符合条件的行名。

修复后的函数

将判断逻辑中的df[,x]替换为x即可,因为x已经代表当前列的所有数值:

compare.loadings <- function(df) {
  groupings <- sapply(df, function(x) rownames(df)[abs(x) >= 0.3])
  return(groupings)
}

验证结果

运行修复后的函数:

print(compare.loadings(data))
# $MR1
# [1] "C"
# 
# $MR2
# [1] "A" "B" "D" "E"

完全符合预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:00