all_equal: не может присоединиться из-за несовместимых типов (список / список) - PullRequest
1 голос
/ 14 января 2020

У меня есть data.frame, созданный в формате JSON. Он содержит массивы простых типов, которые по умолчанию представлены в виде списка из одного вектора. Затем в модульных тестах я пытаюсь проверить это с помощью 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) 

Примечание: I Как исправить ошибку «Ошибка: невозможно присоединиться к файлам« .rows »x» .rows »из-за несовместимых типов (список / список)» с использованием censReg , но я не думаю, что у меня есть эта проблема, потому что кадры данных не сгруппированы. В любом случае я пытался разгруппировать их, выход не изменился.

...