执行因子分析后,加载对象如下所示:
Loadings:
Factor1 Factor2
IV1 0.844 -0.512
IV2 0.997
IV3 -0.235
IV4 -0.144
IV5 0.997
Factor1 Factor2
SS loadings 1.719 1.333
Proportion Var 0.344 0.267
Cumulative Var 0.344 0.610
我可以使用print(fit$loadings[,1:2])
来定位因素本身,以获取以下内容。
Factor1 Factor2
IV1 0.84352949 -0.512090197
IV2 0.01805673 0.997351400
IV3 0.05877499 -0.234710743
IV4 0.09088599 -0.144251843
IV5 0.99746785 0.008877643
我想创建一个类似于以下内容的json字符串。
"loadings": {
"Factor1": {
"IV1": 0.84352949, "IV2":0.01805673, "IV3":0.05877499, "IV4": 0.09088599, "IV5": 0.99746785
},
"Factor2": {
"IV1": -0.512090197, "IV2": 0.997351400, "IV3": -0.234710743, "IV4": -0.144251843, "IV5": 0.008877643
}
}
我尝试使用unclass()访问各个属性,希望我可以循环并将它们放入一个字符串中,没有任何运气(使用loads <- loadings(fit)
和<- names(unclass(loads))
名称显示为“null”)
答案 0 :(得分:4)
借助更近的例子,借助@ GSee的评论(+1)和@ dickoa的回答(+1):
为可重复的示例创建一些演示数据(您还应该在所有Q中提供一个):
> fit <- princomp(~ ., data = USArrests, scale = FALSE)
加载RJSONIO
/ rjson
个包:
> library(RJSONIO)
转换您的数据以满足您的需求:
> res <- list(loadings = apply(fit$loadings, 2, list))
返回JSON:
> cat(toJSON(res))
{
"loadings": {
"Comp.1": [
{
"Murder": -0.041704,
"Assault": -0.99522,
"UrbanPop": -0.046336,
"Rape": -0.075156
}
],
"Comp.2": [
{
"Murder": 0.044822,
"Assault": 0.05876,
"UrbanPop": -0.97686,
"Rape": -0.20072
}
],
"Comp.3": [
{
"Murder": 0.079891,
"Assault": -0.06757,
"UrbanPop": -0.20055,
"Rape": 0.97408
}
],
"Comp.4": [
{
"Murder": 0.99492,
"Assault": -0.038938,
"UrbanPop": 0.058169,
"Rape": -0.072325
}
]
}
}>
答案 1 :(得分:3)
你可以沿着这些方向做点什么
require(RJSONIO) ## or require(rjson)
pca <- prcomp(~ ., data = USArrests, scale = FALSE)
export <- list(loadings = split(pca$rotation, rownames(pca$rotation)))
cat(toJSON(export))
## {
## "loadings": {
## "Assault": [ 0.99522, -0.05876, -0.06757, 0.038938 ],
## "Murder": [ 0.041704, -0.044822, 0.079891, -0.99492 ],
## "Rape": [ 0.075156, 0.20072, 0.97408, 0.072325 ],
## "UrbanPop": [ 0.046336, 0.97686, -0.20055, -0.058169 ]
## }
## }
如果要导出它:
cat(toJSON(export), file = "loadings.json")
如果它不能满足您的需要,只需将数据结构(export
对象)修改为您想要的输出。