gpt4 book ai didi

r - 通过类似于 rbind 的引用将 data.table 附加到另一个 data.table

转载 作者:行者123 更新时间:2023-12-04 01:33:22 25 4
gpt4 key购买 nike

我想在最后附加(“rbind”)一个 data.table 对象
函数内的另一个 data.table 对象
不返回组合结果
但直接附加到第一个数据表对象
这样我就不必分配函数结果
再次到第一个data.table。

由于 data.table 作为函数参数通过引用传递
这可能是可能的,但 rbindrbindlist总是创造
一个新的结果对象,而不是附加到现有的 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

最佳答案

我们需要将它分配给全局环境中的对象。在 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

关于r - 通过类似于 rbind 的引用将 data.table 附加到另一个 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com