1

我已经实现了 rstudio 的 htmlwidgets 的包装库部分,它呈现一个数据透视表。包裹在这里

该软件包适用于 data.tables 和 data.frame(应该如此!)。例如,它适用于虹膜。另一方面,如果我尝试将 iris 转换为 data.table 我的包(实际上是 htmlwidgets - 它在内部使用 RJSONIO)会引发错误。

我知道这看起来很复杂,但是您可以通过检查以下代码之间的差异来重现错误:

library(data.table)
library(RJSONIO)
data.table(fromJSON(toJSON(data.table(iris))))

结果与亲爱的鸢尾花数据集不同:

                                           V1
1:                   5.1,4.9,4.7,4.6,5.0,5.4,
2:                   3.5,3.0,3.2,3.1,3.6,3.9,
3:                   1.4,1.4,1.3,1.5,1.4,1.7,
4:                   0.2,0.2,0.2,0.2,0.2,0.4,
5: setosa,setosa,setosa,setosa,setosa,setosa,

另一方面,jsonlite 能够正确地重新构建 iris(只要记住在运行代码之前分离 RJSONIO):

    library(data.table)
    library(jsonlite)
    data.table(fromJSON(toJSON(data.table(iris))))

     Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
  1:          5.1         3.5          1.4         0.2    setosa
  2:          4.9         3.0          1.4         0.2    setosa
  3:          4.7         3.2          1.3         0.2    setosa
  4:          4.6         3.1          1.5         0.2    setosa
  5:          5.0         3.6          1.4         0.2    setosa

我不确定问题出在 data.table 还是 RJSONIO ...

4

1 回答 1

3

这与json无关。
RJSONIO::fromJSON返回listjsonlite::fromJSON返回data.frame
它与 call on 相关,与data.tablecall onlist不同data.frame,但仍按预期运行。
尝试as.data.table而不是data.table在外部调用中。

as.data.table(fromJSON(toJSON(data.table(iris))))

这已经在 data.table github 上讨论过了。我已经回复了你的问题,提到了讨论。

于 2015-02-06T18:49:13.567 回答