all_equal:由于类型不兼容(列表/列表)而无法加入

时间:2020-01-13 21:19:08

标签: r dataframe jsonlite

我有一个以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,但是我认为没有这个问题,因为数据帧没有分组。无论如何,我都试图将它们取消分组,输出没有变化。

0 个答案:

没有答案