我想在函数内的另一个 data.table 对象的末尾附加(“rbind”)一个 data.table 对象,而不返回组合结果,而是直接附加到第一个数据表对象,这样我就不必分配函数结果再次到第一个data.table。
由于data.table被引用作为函数的参数传递它可能是可能的,但rbind和rbindlist你总是创造的,而不是附加到现有data.table对象的新结果对象。
我怎样才能做到这一点?
library(data.table)
dt1 <- data.table(a = 1, b = "hello")
dt2 <- data.table(a = 2, b = "world")
dt.all <- data.table::rbindlist(list(dt1, dt2))
dt.all
# a b
# 1: 1 hello
# 2: 2 world
dt.append <- function(x1, x2) {
x1 <- data.table::rbindlist(list(x1, x2)) # does not change the outer data.table!
invisible()
}
dt.append(dt1, dt2)
dt1 # I would like to see both rows here
# a b
# 1: 1 hello
Run Code Online (Sandbox Code Playgroud)
我们需要将它分配给全局环境中的对象。在 OP 的函数中,它被本地分配给一个名为“x1”的对象,并且函数的好处之一是全局对象不会发生变异(局部范围)
dt.append <- function(x1, x2) {
obj <- deparse(substitute(x1)) # get the actual object name as a string
assign(obj, value = data.table::rbindlist(list(x1, x2)), envir = .GlobalEnv)
}
dt1
# a b
#1: 1 hello
#2: 2 world
Run Code Online (Sandbox Code Playgroud)