我正在使用PCA模型(使用FactoMineR库)减少测试DataFrame(包含30和750 colunm)的维度,如下所示:
pca_base <- PCA(test, ncp=5, graph=T)
我使用函数dimdesc()[在FactoMineR]中进行维度描述 使用给定的主成分识别最显着相关的变量如下:
pca_dim<-dimdesc(pca_base)
pca_dim是3长度的列表。
我的问题是如何从列表[1]和列表[2]中提取pca_dim的行名称。
我试试这段代码:
#to select dim 1,2 use axes
pca_dim<-dimdesc(pca_base,axes = c(1,2))
rownames(pca_dim[[1]])
但结果是NULL。
暂时,我将使用来自factoextra包的演示数据集decathlon2:data(decathlon2) 它包含由13个变量描述的27个人(运动员)。
library(factoextra)
data(decathlon2)
decathlon2.active <- decathlon2[1:23, 1:10]
res.pca <- PCA(decathlon2.active,scale.unit = TRUE, graph = FALSE)
res.desc <- dimdesc(res.pca, axes = c(1,2))
谢谢!
答案 0 :(得分:2)
当遇到这类问题时,要访问R对象的信息,解决它们的最佳方法是首先检查函数str
的输出。
str(pca_dim)
#List of 2
# $ Dim.1:List of 1
# ..$ quanti: num [1:8, 1:2] 0.794 0.743 0.734 0.61 0.428 ...
# .. ..- attr(*, "dimnames")=List of 2
# .. .. ..$ : chr [1:8] "Long.jump" "Discus" "Shot.put" "High.jump" ...
# .. .. ..$ : chr [1:2] "correlation" "p.value"
# $ Dim.2:List of 1
# ..$ quanti: num [1:3, 1:2] 8.07e-01 7.84e-01 -4.65e-01 3.21e-06 9.38e-06 ...
# .. ..- attr(*, "dimnames")=List of 2
# .. .. ..$ : chr [1:3] "Pole.vault" "X1500m" "High.jump"
# .. .. ..$ : chr [1:2] "correlation" "p.value"
因此对象的结构很简单,它是两个列表的列表。这些子列表中的每一个都只有一个成员,即设置了dimnames
属性的矩阵
因此,您可以使用标准访问器函数来获取这些属性。
rownames(pca_dim$Dim.1$quanti)
#[1] "Long.jump" "Discus" "Shot.put" "High.jump" "Javeline"
#[6] "X400m" "X110m.hurdle" "X100m"
rownames(pca_dim$Dim.2$quanti)
#[1] "Pole.vault" "X1500m" "High.jump"
答案 1 :(得分:1)
您必须为每个元素移动dimdesc
的结果为data.frame
,如下所示:
rownames(data.frame(res.desc[1]))
[1] "Long.jump" "Discus" "Shot.put" "High.jump" "Javeline" "X400m" "X110m.hurdle"
[8] "X100m"
> rownames(data.frame(res.desc[2]))
[1] "Pole.vault" "X1500m" "High.jump"