R 一切平等:可以';由于类型不兼容(列表/列表),无法加入
我有一个data.frame,由JSON格式创建。它包含简单类型的数组,默认情况下表示为单个向量的列表。然后在单元测试中,我尝试用R 一切平等:可以';由于类型不兼容(列表/列表),无法加入,r,dataframe,jsonlite,R,Dataframe,Jsonlite,我有一个data.frame,由JSON格式创建。它包含简单类型的数组,默认情况下表示为单个向量的列表。然后在单元测试中,我尝试用dplyr::all_equal检查它(我现在不关心列顺序,它们被jsonlite::flatte重新排序,我不知道如何处理) 但是all_equal失败,并显示一条不太有用的消息无法加入'arr'x'arr',因为不兼容的类型(列表/列表)。我不知道出了什么问题,list根本不能接受吗?我是否应该将此列转换为其他内容?(什么?) 显示我正在尝试做什么的最小示例: f
dplyr::all_equal
检查它(我现在不关心列顺序,它们被jsonlite::flatte
重新排序,我不知道如何处理)
但是all_equal
失败,并显示一条不太有用的消息无法加入'arr'x'arr',因为不兼容的类型(列表/列表)
。我不知道出了什么问题,list
根本不能接受吗?我是否应该将此列转换为其他内容?(什么?)
显示我正在尝试做什么的最小示例:
f <- function() {
current <- jsonlite::fromJSON('{"objs":[{"arr":["l1", "l2"], "key":"1"}]}')$objs
expected <- data.frame("key" = "1", stringsAsFactors = F) %>%
mutate("arr" = list(c("l1", "l2")))
str(current)
str(expected)
all_equal(current, expected, ignore_col_order = TRUE)
}
f()
注意:我看到了,但我认为我没有这个问题,因为数据帧没有分组。无论如何,我都试图将它们解组,但输出没有变化。我也很乐意找到一种方法,可以在不改变列顺序的情况下展平嵌套的数据帧(这将使我使用
all.equal
而不是all\u equal
),但这似乎超出了这个问题的范围。使用all.equal
我得到TRUE
,但使用all\u equal
时会得到错误。你是在追求all.equal
还是all_equal
?@onyanbu我想all_equal
忽略列的顺序,因为jsonlite::flatte
会对列进行重新排序。我将编辑问题以更好地反映这一点(在这种情况下,all.equal
将返回FALSE
),似乎all_equal()
无法处理包含嵌套元素的数据帧。如果您先取消nest,它会工作list(current,expected)%%>%map(unnest,arr)%%>{all_equal([1]],[2]])}
。我也很乐意找到一种方法,可以在不改变列顺序的情况下展平嵌套的数据帧(这将使我使用all.equal
而不是all_equal
),但这似乎超出了这个问题的范围。使用all.equal
我得到TRUE
,但使用all\u equal
时会得到错误。你是在追求all.equal
还是all_equal
?@onyanbu我想all_equal
忽略列的顺序,因为jsonlite::flatte
会对列进行重新排序。我将编辑问题以更好地反映这一点(在这种情况下,all.equal
将返回FALSE
),似乎all_equal()
无法处理包含嵌套元素的数据帧。如果您先取消测试,它将工作list(当前,预期)%%>%map(取消测试,arr)%%>%{all_equal([1]],[2]])}
。
'data.frame': 1 obs. of 2 variables:
$ key: chr "1"
$ arr:List of 1
..$ : chr "l1" "l2"
'data.frame': 1 obs. of 2 variables:
$ key: chr "1"
$ arr:List of 1
..$ : chr "l1" "l2"
Error: Can't join on 'arr' x 'arr' because of incompatible types (list / list)