2016-06-15 2 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 
,210

이 불가능한 경우 - 예를 들어 당신이 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