2015-02-06 68 views
1

我已經實現了呈現透視表的rstudio的htmlwidgets的包裝庫部分。 包裝是here使用data.table和RJSONIO/jsonlite - 結果轉換

該包適用於data.tables和data.frame(因爲它應該!)。例如它適用於虹膜。 另一方面,如果我嘗試將虹膜轉換爲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能夠正確地重新構建光圈(只記得運行代碼之前分離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上...

回答

3

這與json無關。
RJSONIO::fromJSON返回listjsonlite::fromJSON返回data.frame
它與list上的data.table呼叫有關,它與data.frame上的呼叫不同,但仍然按預期行事。
嘗試as.data.table而不是data.table在外部調用。

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

這已經在data.table github上討論過了。我已經回覆你的問題提到討論。

+1

我已經接受您的解決方案,因爲它解決了問題。另一方面,當我在列名稱中使用點(例如data.table(iris) - 或as.data.table(iris))時,我的包中仍然存在錯誤,可能是由於RJSONIO轉換。看到我對github的評論。 – Enzo 2015-02-09 11:01:28

+1

你在github上發佈的建議是正確的:data.table'''1.9.5'''修復了這個問題! – Enzo 2015-02-09 17:25:40