dplyr::do
不适用于data.table
:
# this works
data.frame(1) %>%
do(data.frame(1))
## X1
## 1 1
# same for a data.table does not work
data.table(1) %>%
do(data.frame(1))
## Error in do_.data.table(.data, .dots = lazyeval::lazy_dots(...)) :
## argument ".f" is missing, with no default
一些调查发现了函数
do
和do_.data.table
:do
## function (.data, ...)
## {
## do_(.data, .dots = lazyeval::lazy_dots(...))
## }
## <environment: namespace:dplyr>
dplyr:::do_.data.table
## function (.data, .f, ...)
## {
## list(.f(as.data.frame(.data), ...))
## }
## <environment: namespace:dplyr>
这是如何工作的?显然,
do_.data.table
的参数与从do
获取的不兼容。而do_.data.table
的结果是一个列表,而不是data.frame
。我如何使用data.table
输入来使用do
或do_
?我知道我可以使用
df %>% data.frame %>% do(...)
,但我希望有一个直接的解决方案。
.f
是在原始数据和你提供的参数上调用的函数(例如,它可以是.f = data.frame
或cbind
),所以我会说你的帖子已经回答了“如何”的问题,而问题更多的是“为什么”它返回一个列表... 对此一无所知!你可以通过... %>% `[[`(1)
来获取列表中返回的数据框,但你可能已经知道了 :) - konvas