【问题标题】:Read JSON with infinity in R在 R 中读取无穷大的 JSON
【发布时间】:2020-03-19 09:51:31
【问题描述】:

我正在寻找一种方法来读取包含在 JSON 文件中编码的无限值的矩阵到 R 中。我目前正在使用 RJSONIO 库获得最远的结果(rjson 和 rjsonlite 在我的案例)。

一个最小的说明性示例如下: (编辑:这个例子不够通用,我正在寻找的方法也可以处理 R 中没有生成的非有限值

> library("RJSONIO")

> M <- matrix(c(1:5, Inf), ncol=2, byrow=TRUE); M

     [,1] [,2]
[1,]    1    2
[2,]    3    4
[3,]    5  Inf

> fromJSON(toJSON(M))

[[1]]
[1] 1 2

[[2]]
[1] 3 4

[[3]]
[[3]][[1]]
[1] 5

[[3]][[2]]
NULL

执行此代码还将产生一个警告,指出非有限值可能无法在 JSON 中适当地表示。

我想知道是否有一种解决方法可以在文件读取期间正确表示无限值?我可以在阅读后将文件存储为列表,但不能将最后一个元素不是数字向量。

请注意,我并不是真的在寻找一种在读取整个文件后转换非数字向量的后处理方法:我已经有了这个,但是我正在使用的实际文件非常大并且是嵌套的,所以我宁愿不必重新运行它们。

【问题讨论】:

    标签: r json infinity


    【解决方案1】:

    有几个(较新的)JSON 库可供选择——我使用了jsonlite 一点,这里没有问题:

    R> library(jsonlite)
    R> M <- matrix(c(1:5, Inf), ncol=2, byrow=TRUE); M
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]    5  Inf
    R> fromJSON(toJSON(M))
         [,1] [,2]
    [1,]    1    2
    [2,]    3    4
    [3,]    5  Inf
    R> 
    

    【讨论】:

    • 不幸的是,这对我的情况来说不够笼统。也许我的例子还不够。我正在使用的实际 json 文件是在 Python 中构建的,使用 jsonlite::fromJSON 无法识别生成的“Infinity”(尽管 as.numeric("Infinity") 确实正确地导致了 R 中的 Inf)。知道 jsonlite::fromJSON 确实识别“Inf”会有所帮助,现在另一种可能性是查看从 Python 写出文件时是否可以以这种方式编码我的文件。
    • 一般来说,在你的问题中写下你的问题实际上是什么是有帮助的。那么显然,您真正想要的是来自 Python 的基于 JSON 的序列化?
    • 我更具体地寻找一种有效的方法来写出一个 json 文件,包括在 Python 中包含非有限值 (numpy.inf) 的矩阵(表示为列表的列表),然后再次读取它们到 R 中。无限值的单独处理可以在 Python 或 R 中完成,但需要在写入/读取时完成。
    猜你喜欢
    • 2014-05-17
    • 2016-08-13
    • 2020-09-02
    • 2022-08-12
    • 2019-03-19
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多