Вот фрагмент кода:
y <- purrr::map(1:2, ~ c(a=.x))
test1 <- dplyr::bind_rows(y)
test2 <- do.call(dplyr::bind_rows, y)
При первом вызове bind_rows
(test1
) генерируется ошибка
Error in bind_rows_(x, .id) : Argument 1 must have names
Использование do.call
для вызова bind_rows
(test2
), с другой стороны, работает как положено:
test2
# A tibble: 2 x 1
a
<int>
1 1
2 2
Почему?Это использует dplyr 0.7.6 и purrr 0.2.5.Если я использую map_df
вместо map
, произойдет сбой с той же ошибкой.
Примечание: мне не кажется, что этот вопрос совпадает с Ошибка в bind_rows_ (x,.id): Аргумент 1 должен иметь имена, использующие map_df в purrr .
РЕДАКТИРОВАТЬ: Другой способ решения этой проблемы - явное создание кадра данных в первую очередь:
y <- purrr::map(1:2, ~ data.frame(a=.x))
test1
и test2
теперь создаются без ошибок и являютсяидентичны.
В качестве альтернативы это создает фрейм данных test2
за один шаг:
purrr::map_df(1:2, ~ data.frame(a=.x))