R中jsonlite的列表转换
list conversion of jsonlite in R
我想使用 jsonlite 从 json 文件导入 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)
上面的代码不起作用,因为它在 R 内部是一个数字列表列表。但是,我想恢复我的 A,B,C
列表,即 l
。有没有一种方法可以使用 jsonlite 取回正确的矩阵列表?
这里的问题是,如果转换为 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
我想使用 jsonlite 从 json 文件导入 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)
上面的代码不起作用,因为它在 R 内部是一个数字列表列表。但是,我想恢复我的 A,B,C
列表,即 l
。有没有一种方法可以使用 jsonlite 取回正确的矩阵列表?
这里的问题是,如果转换为 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