手动创建从 fromJSON 函数返回的相同数据框

Manually create the same dataframe returned from fromJSON function

我有一个 JSON 字符串,其中 returns 一个使用 jsonlite 包的数据框。

 library(jsonlite)
 d  <- fromJSON('[{"x":"A","value":100},{"x":"B","value":100},{"x":["A","B"],"value":20}]' )

它给了我

     x value
1    A   100
2    B   100
3 A, B    20

但我想手动重新创建相同的数据框。 Class 列 x 是一个列表。

我的尝试如下:

   data.frame(x = c("A","B",list(c("A","B"))),value = c(100,100,20))

这给了我一个错误 differing no。行数

我们可以在 base R

中的 list 上用 I 换行
d1 <- data.frame(x = I(list("A", "B", c("A", "B"))), value = c(100, 100, 20))
d1
#      x value
#1    A   100
#2    B   100
#3 A, B    20

它将为 "AsIs"、

添加一个 attribute
attr(d1$x, "class")
#[1] "AsIs"

但是忽略属性是一样的数据

all.equal(d1, d, check.attributes = FALSE)
#[1] TRUE

或者如果我们把属性赋值给NULL,也是一样的

attr(d1$x, "class") <- NULL
all.equal(d1, d)
#[1] TRUE

如果我们使用tibble,则更直接`

library(tibble)
tibble(x = list("A", "B", c("A", "B")), value = c(100, 100, 20))