首页 文章

dplyr :: do如何使用data.table

提问于
浏览
3

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 . 如何使用 dodo_data.table 输入?

我知道我可以使用 df %>% data.frame %>% do(...) ,但我希望能直接解决 .

2 回答

  • 1

    错误在于它没有为 .f 提供任何可以使用的东西 . 如果你输入一个函数,它的工作原理是:

    data.table(1) %>% 
      do(function(x) data.frame(x))
    

    回报

    [[1]]
      V1
    1  1
    
  • 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 .

相关问题