gpt4 book ai didi

r - 可以在管道中使用 data.table rbindlist

转载 作者:行者123 更新时间:2023-12-05 08:53:24 27 4
gpt4 key购买 nike

是否可以在管道操作中使用 data.table rbindlist?我在下面发布了一个 MWE。我尝试通过管道在 rbindlist 中创建一个 data.table c 但出现错误。

相反,我必须操作 c,然后将 rbindlist 分配给 c(但 c 在 rbindlistlist 参数中使用。如果可能的话,我想避免这种情况,我试图通过上面管道中的 rbindlist 来完成。这可能吗?

感谢任何帮助,谢谢。

library(data.table)
library(magrittr)

a <- data.table(colA = 1:10,
colB = 11:20)

b <- data.table(colA = 300,
colB = 500)

c <- a %>%
.[, colB := colB * 10] %>%
rbindlist(list(.,b),
use.names = TRUE,
fill = TRUE)
#> Error in rbindlist(., list(., b), use.names = TRUE, fill = TRUE): idcol must be a logical or character vector of length 1. If logical TRUE the id column will named '.id'.

c <- a %>%
.[, colB := colB * 10]

c <- rbindlist(list(c,b),
use.names = TRUE,
fill = TRUE)

最佳答案

这确实是可能的,但你想为此使用额外的大括号:

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 那样工作想要接收要绑定(bind)的对象列表作为第一个参数。现在,如果我们想使用快捷方式 .但不想将数据传递给第一个参数,我们可以使用额外的括号 {}创建表达式。表达式的类型为 {x <- 2; y <- x^2; y + x}返回 y + x ,所以 %>% 是有道理的这不是将数据作为第一个参数传递,因为没有。

关于r - 可以在管道中使用 data.table rbindlist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53825343/

27 4 0