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
。如何在do
输入时使用do_
或data.table
?
我知道我可以使用df %>% data.frame %>% do(...)
,但我希望能直接解决问题。
答案 0 :(得分:1)
看起来do_
将使用您的参数执行.f
并将其返回到列表中。
data.table(1) %>%
do_(data.frame(2), data.frame(3), .f = function(x1, x2, x3) cbind(x1, x2, x3))
# [[1]]
# V1 X2 X3
# 1 1 2 3
尽管不知道do
。
答案 1 :(得分:1)
错误在于它并不知道要应用哪种功能,因为您无法为.f
提供可以使用的功能。如果你输入一个函数,它可以工作:
data.table(1) %>%
do(function(x) data.frame(x))
返回
[[1]]
V1
1 1