是否可以在管道操作中使用data.table
rbindlist
?我在下面发布了MWE。我尝试通过data.table
中的管道创建一个rbindlist
c,但是出现错误。
相反,我必须操纵c,然后将rbindlist
分配给c(但是c用于list
的{{1}}参数中。如果可能,我想避免这种情况,我尝试通过上方管道中的rbindlist
完成此操作。
感谢您的帮助。
rbindlist
答案 0 :(得分:3)
这确实有可能,但是您想为此使用额外的括号:
c <- a %>%
.[, colB := colB * 10] %>%
{rbindlist(list(.,b), use.names = TRUE, fill = TRUE)}
从错误本身来看,其原因很明显:
# Error in rbindlist(., list(., b), use.names = TRUE, fill = TRUE): ...
也就是说,您的尝试等同于
rbindlist(aTransformed, list(aTransformed, b), use.names = TRUE, fill = TRUE)
显然不是您的意图,并且不起作用,因为rbindlist
希望接收要绑定的对象列表作为第一个参数。现在,如果我们想使用快捷键.
但又不想将数据传递给第一个参数,则可以使用额外的括号{}
创建一个表达式。表达式的类型为{x <- 2; y <- x^2; y + x}
,返回的是y + x
,因此,%>%
并不希望将数据作为第一个参数传递,因为没有参数。
答案 1 :(得分:3)
虽然Julius的解决方案效果很好,但这种简单的解决方案不能满足您的需求吗?
c <- a %>%
.[, colB := colB * 10] %>%
list(b) %>%
rbindlist(use.names = TRUE, fill = TRUE)
# without pipes:
c <-
rbindlist(
list(
a[, colB := colB * 10],
b
),
use.names = TRUE,
fill = TRUE
)