2

因子分析を実行すると、負荷オブジェクトは次のようになります。

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」として表示されます)。

4

2 に答える 2

4

@GSee のコメント (+1) と @dickoa の回答 (+1) に、より近い例を示します。

  1. 再現可能な例のためにいくつかのデモ データを作成します (すべての Q で 1 つを提供する必要があります)。

    > 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 
    } 
    ] 
    } 
    }> 
    
于 2013-03-23T10:47:48.327 に答える
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オブジェクト) を必要な出力に変更するだけです。

于 2013-03-23T08:28:05.720 に答える