繁体   English   中英

通过函数内部的引用设置data.table

[英]set data.table by reference inside a function

这是我想做的一个非常简单的例子。

test <- data.table(a=c(1,2,3),b=c(4,5,6))

f1 <- function(){
  test2 <- data.table(a=c(4,5,6),b=c(1,2,3))
  test <- copy(test2)
}

f1()

> test
   a b
1: 1 4
2: 2 5
3: 3 6

我想将test2通过引用直接复制到test ,复制到函数f1()以便输出为

> test
   a b
1: 4 1
2: 5 2
3: 6 3

我知道<-正在制作副本,我也想这样做,即复制data.table,但需参考。 有没有办法使之成为可能?

谢谢大家!

在这种情况下,通过引用进行复制是矛盾的(“副本”具有不同的内存地址)。

当前,无法对任意data.tables进行引用替换 data.table的内容,因为无法通过引用修改行数 (在testtest2可能不同)。

在特殊情况下,用另一个具有相同行数的数据替换数据表...

(test <- data.table(x=1:3)); address(test)
#    x
# 1: 1
# 2: 2
# 3: 3
# [1] "0000000016286280"

f1 <- function(){
  test2 <- data.table(y=LETTERS[1:3])

  test[, names(test2) := test2]
  test[, setdiff(names(test),names(test2)) := NULL]
}

f1()
test; address(test)
#    y
# 1: A
# 2: B
# 3: C
# [1] "0000000016286280"

达成此目标的方法可能比较笨拙,但我不确定一开始是否值得这样做。

只需退出f1

f1 <- function(){
    test2 <- data.frame(a=c(4,5,6),b=c(1,2,3))
    return(test2)
}

通过

test <- f1()

屈服

> test
  a b
1 4 1
2 5 2
3 6 3

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM