我已经实现了一个包装器库,它是rstudio的htmlwidget的一部分,它呈现了一个pivot表。这个包是这里。
这个包在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.
发布于 2015-02-06 18:49:13
这与json无关。
RJSONIO::fromJSON返回list,而jsonlite::fromJSON返回data.frame。
它与data.table在list上的调用有关,与对data.frame的调用不同,但仍按预期的行为进行。
在外部调用中尝试as.data.table而不是data.table。
as.data.table(fromJSON(toJSON(data.table(iris))))这已经在data.table github上讨论过了。我已对你的问题作了答复,提到了这次讨论。
https://stackoverflow.com/questions/28372298
复制相似问题