据我了解,您目前有:
vector_var1 <- c(1, 1)
vector_var2 <- c("a", "a")
list_vec1 <- list(c("a", "b", "c"), c("a"))
list_vec2 <- list(c(1,2,3), c(1,2,3,4,5))
您可以将其放入具有 列表列的数据框中:
dat <- data.frame(
var1 = vector_var1,
var2 = vector_var2,
vec1 = I(list_vec1),
vec2 = I(list_vec2)
)
这给出了这个 JSON:
jsonlite::toJSON(dat, pretty = TRUE)
# [
# {
# "var1": 1,
# "var2": "a",
# "vec1": ["a", "b", "c"],
# "vec2": [1, 2, 3]
# },
# {
# "var1": 1,
# "var2": "a",
# "vec1": ["a"],
# "vec2": [1, 2, 3, 4, 5]
# }
# ]
这是你需要的吗?
编辑
根据 cmets 中的讨论,以下是如何使用 purrr::transpose 和 rlist::list.zip 获得所需结果:
vector_var1 <- c(1, 1)
vector_var2 <- c("a", "a")
list_vec1 <- list(c("a", "b", "c"), c("a", "b", "c", "d", "e"))
list_vec2 <- list(c(1,2,3), c(1,2,3,4,5))
L1 <- purrr::transpose(list(list_vec1, list_vec2))
L2 <- lapply(L1, function(vecs){
do.call(rlist::list.zip, c(vecs, list(use.names=FALSE)))
})
dat <- data.frame(var1 = vector_var1, var2 = vector_var1, vec = I(L2))
jsonlite::toJSON(dat, auto_unbox = TRUE)
# [{"var1":1,"var2":1,"vec":[["a",1],["b",2],["c",3]]},{"var1":1,"var2":1,"vec":[["a",1],["b",2],["c",3],["d",4],["e",5]]}]