2016-06-15 4 views
2

jsonliteを使用してjsonファイルからインポートしたR内の行列のリストを得たいと考えています。jsonliteのリスト変換をR

A <- matrix(rnorm(100),10,10) 
B <- matrix(rnorm(100),10,10) 
C <- matrix(rnorm(100),10,10) 
l <- list(A,B,C) 
import_l <- fromJSON(toJSON(l),simplifyMatrix = FALSE) 

上記のコードは内部的には数字のリストであるため動作しません。ただし、A,B,Cのリストを返信したいとします。つまり、lです。 jsonliteを使用して行列の正しいリストを取得する方法はありますか?

答えて

1

ここでの問題は、JSONに変換する場合は、列の行列と、名前のリストは同じように見えるということである:あなたの場合

toJSON(list(A = 1, B = 2, C = 3)) 
## {"A":[1],"B":[2],"C":[3]} 

toJSON(list(1, 2, 3)) 
## [[1],[2],[3]] 
toJSON(matrix(c(1, 2, 3), ncol = 1)) 
## [[1],[2],[3]] 

しかし、という名前リストが違って見える

あなたの例で名前付きリストを使用すると、 fromJSON()は実際に元のリストを再現します:

l <- list(A = A, B = B, C = C) 
all.equal(fromJSON(toJSON(l)), l, tol = 1e-4) 
## [1] TRUE 

はこれが不可能な場合 - たとえばあなたはJSONファイルを自分で作成するが、入力として、それを得ることはありませんので、 - あなたはまた、あなたがfromJSON()で得た結果に変換することができます

l <- list(A, B, C) 
import_l <- fromJSON(toJSON(l)) 
l2 <- lapply(1:3, function(i) import_l[i, , ]) 
all.equal(l2, l, tol = 1e-4) 
## [1] TRUE 
関連する問題