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
相关产品推荐
相关产品推荐

