2013-03-22 56 views
2

進行因子分析的載荷對象看起來像這樣經過:創建從負載JSON字符串對象中的R

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))名稱顯示爲「零」 )

+1

這是沿着你想要做什麼行:'庫(RJSONIO)的toJSON( fit $ loadings [,1:2])'?你想讓輸出與你所顯示的完全一致嗎? – GSee 2013-03-22 23:12:11

回答

4

只是借調@ GSEE的評論(+1)和@ dickoa的答案(+1)以接近例如:

  1. 創建重複的例子,一些演示數據(你也應該提供一個在所有Qs的):

    > fit <- princomp(~ ., data = USArrests, scale = FALSE) 
    
  2. 負載RJSONIO/rjson包:

    > library(RJSONIO) 
    
  3. 將您的數據,以滿足您的需求:

    > res <- list(loadings = apply(fit$loadings, 2, list)) 
    
  4. 返回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 
    } 
    ] 
    } 
    }> 
    
+0

@darockzig +1 !!!很好的答案 – dickoa 2013-03-23 14:27:53

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對象)修改爲您想要的輸出。