首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jsonlite在R中的列表转换

jsonlite在R中的列表转换
EN

Stack Overflow用户
提问于 2016-06-15 06:59:15
回答 1查看 1.3K关注 0票数 2

我希望使用jsonlite从json文件导入R中的矩阵列表。

代码语言:javascript
复制
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获得正确的矩阵列表?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 19:58:41

这里的问题是,如果转换为JSON,列矩阵和未命名的列表看起来是一样的:

代码语言:javascript
复制
toJSON(list(1, 2, 3))
## [[1],[2],[3]] 
toJSON(matrix(c(1, 2, 3), ncol = 1))
## [[1],[2],[3]]

但是,命名列表看起来不一样:

代码语言:javascript
复制
toJSON(list(A = 1, B = 2, C = 3))
## {"A":[1],"B":[2],"C":[3]} 

如果在示例中使用命名列表,fromJSON()确实会复制原始列表:

代码语言:javascript
复制
l <- list(A = A, B = B, C = C)
all.equal(fromJSON(toJSON(l)), l, tol = 1e-4)
## [1] TRUE

如果这是不可能的--例如,因为您不是自己创建JSON文件,而是将其作为输入来获取--您也可以使用fromJSON()转换所获得的结果。

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37828173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档