dplyr :: do如何使用data.table

时间:2015-04-14 16:00:39

标签: r data.table dplyr

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

某些调查会导致函数dodo_.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(...),但我希望能直接解决问题。

2 个答案:

答案 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