R - 无法创建 JSON 文件
R - Unable to Create a JSON file
我在论坛上搜索了一下,没有找到类似的问题,所以如果我错过了,我深表歉意。
简单地说,我得到了一个 JSON
文件,我想创建它。所以我认为一个简单的方法是通过 jsonlite
包中的 fromJSON
函数解析文件并查看 R 对象的结构,然后尝试创建 JSON
文件首先创建 R 对象并使用函数 toJSON
。
给我的 JSON
文件如下:
[[{"name":"Wine"},{"data":[{"rating":"23.45","month":8,"year":2012,"day":8},{"rating":"23.66","month":8,"year":2012,"day":9},{"rating":"24.75","month":8,"year":2013,"day":9},{"rating":"24.97","month":8,"year":2013,"day":12}]}]]
使用 fromJSON
函数解析上述 JSON
文件得到以下对象:
str(object)
List of 1
$ :'data.frame': 2 obs. of 2 variables:
..$ name: chr [1:2] "Wine" NA
..$ data:List of 2
.. ..$ : NULL
.. ..$ :'data.frame': 248 obs. of 4 variables:
.. .. ..$ rating: chr [1:248] "23.45" "23.66" "23.59" "23.48" ...
.. .. ..$ month : int [1:248] 8 8 8 8 8 8 8 8 8 8 ...
.. .. ..$ year : int [1:248] 2012 2012 2012 2012 2012 2012 2012 2012 ...
.. .. ..$ day : int [1:248] 8 9 10 13 14 15 16 17 20 21 ...
正在创建上述对象。值是随机的
name = c("Wine", NA)
data = list(NULL, data.frame(rating = as.character(c(1:248)), month = as.integer(rep(12, 248)), year = as.integer(rep(1940, 248)), day = as.integer(rep(31, 248)), stringsAsFactors = FALSE))
result = data.frame(name, data)
最后一行报错:
Error in data.frame(NULL, list(rating = c("1", "2", "3", "4", "5", "6", : arguments imply differing number of rows: 0, 248
有人有想法吗?
显然 data.frame()
函数递归到它接收的列表的第二个元素或类似的东西。
构建原始示例中的数据框的一种可能方法是替换列,例如:
result <- data.frame(name=name,data=NA)
result$data <- data
那么你需要的是:
str(result)
'data.frame': 2 obs. of 2 variables:
$ name: Factor w/ 1 level "Wine": 1 NA
$ data:List of 2
..$ : NULL
..$ :'data.frame': 248 obs. of 4 variables:
.. ..$ rating: chr "1" "2" "3" "4" ...
.. ..$ month : int 12 12 12 12 12 12 12 12 12 12 ...
.. ..$ year : int 1940 1940 1940 1940 1940 1940 1940 1940 1940 1940 ...
.. ..$ day : int 31 31 31 31 31 31 31 31 31 31 ...
我在论坛上搜索了一下,没有找到类似的问题,所以如果我错过了,我深表歉意。
简单地说,我得到了一个 JSON
文件,我想创建它。所以我认为一个简单的方法是通过 jsonlite
包中的 fromJSON
函数解析文件并查看 R 对象的结构,然后尝试创建 JSON
文件首先创建 R 对象并使用函数 toJSON
。
给我的 JSON
文件如下:
[[{"name":"Wine"},{"data":[{"rating":"23.45","month":8,"year":2012,"day":8},{"rating":"23.66","month":8,"year":2012,"day":9},{"rating":"24.75","month":8,"year":2013,"day":9},{"rating":"24.97","month":8,"year":2013,"day":12}]}]]
使用 fromJSON
函数解析上述 JSON
文件得到以下对象:
str(object)
List of 1
$ :'data.frame': 2 obs. of 2 variables:
..$ name: chr [1:2] "Wine" NA
..$ data:List of 2
.. ..$ : NULL
.. ..$ :'data.frame': 248 obs. of 4 variables:
.. .. ..$ rating: chr [1:248] "23.45" "23.66" "23.59" "23.48" ...
.. .. ..$ month : int [1:248] 8 8 8 8 8 8 8 8 8 8 ...
.. .. ..$ year : int [1:248] 2012 2012 2012 2012 2012 2012 2012 2012 ...
.. .. ..$ day : int [1:248] 8 9 10 13 14 15 16 17 20 21 ...
正在创建上述对象。值是随机的
name = c("Wine", NA)
data = list(NULL, data.frame(rating = as.character(c(1:248)), month = as.integer(rep(12, 248)), year = as.integer(rep(1940, 248)), day = as.integer(rep(31, 248)), stringsAsFactors = FALSE))
result = data.frame(name, data)
最后一行报错:
Error in data.frame(NULL, list(rating = c("1", "2", "3", "4", "5", "6", : arguments imply differing number of rows: 0, 248
有人有想法吗?
显然 data.frame()
函数递归到它接收的列表的第二个元素或类似的东西。
构建原始示例中的数据框的一种可能方法是替换列,例如:
result <- data.frame(name=name,data=NA)
result$data <- data
那么你需要的是:
str(result)
'data.frame': 2 obs. of 2 variables:
$ name: Factor w/ 1 level "Wine": 1 NA
$ data:List of 2
..$ : NULL
..$ :'data.frame': 248 obs. of 4 variables:
.. ..$ rating: chr "1" "2" "3" "4" ...
.. ..$ month : int 12 12 12 12 12 12 12 12 12 12 ...
.. ..$ year : int 1940 1940 1940 1940 1940 1940 1940 1940 1940 1940 ...
.. ..$ day : int 31 31 31 31 31 31 31 31 31 31 ...