2016-06-15 2 views
2

Я хотел бы иметь список матриц внутри R, импортированных из json-файла, используя jsonlite.Список преобразований 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(1, 2, 3)) 
## [[1],[2],[3]] 
toJSON(matrix(c(1, 2, 3), ncol = 1)) 
## [[1],[2],[3]] 

Однако имени список выглядит иначе:

toJSON(list(A = 1, B = 2, C = 3)) 
## {"A":[1],"B":[2],"C":[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