我有一个以JSON格式创建的data.frame。它包含简单类型的数组,默认情况下将其表示为单个向量列表。然后在单元测试中,我尝试使用dplyr::all_equal
进行检查(我现在不在乎列顺序,它们被jsonlite::flatten
重新排序,我不知道如何处理)。
但是all_equal
失败,并显示一条不太有用的消息Can't join on 'arr' x 'arr' because of incompatible types (list / list)
。我不知道怎么了-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()
输出:
'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)
注意:我见过How to fix “Error: Can't join on '.rows' x '.rows' because of incompatible types (list / list)” using censReg,但是我认为没有这个问题,因为数据帧没有分组。无论如何,我都试图将它们取消分组,输出没有变化。