我正在尝试比较哪些变量加载到 R 中的探索性因子分析的哪些因子上。显着变量的值大于或等于 0.3。我有几个不同的数据集需要执行此操作,我正在尝试编写一个函数,该函数将数据集作为输入,然后返回每个因素的列表。
作为示例,请考虑下面的数据集,其中行名称是变量,列名称是因子。每个数据集至少有 10 个因子,所以我更喜欢有这个函数,而不是手动将每个因子添加到列表中。
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)
}
返回预期列表
print(compare.loadings(data))
$MR1
[1] "C"
$MR2
[1] "A" "B" "D" "E"
但是,该函数当前返回一个空列表
$MR1
character(0)
$MR2
character(0)
我搜索了许多关于将函数应用于 R 中的列的不同答案,尝试
lapply
,但我不明白为什么我的函数返回空字符。我应该如何修改它以获得我的预期输出?
解决方案是将
names(df)
传递给 sapply
而不是数据帧本身。这样做会将列名称作为字符传递。
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"