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

时间:2015-09-11 21:12:48

标签: r data.table

这是我想要做的一个很好的例子。

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,但是通过引用。有没有办法让这成为可能?

全部谢谢!

2 个答案:

答案 0 :(得分:3)

在此上下文中通过引用进行复制是一种矛盾(其中&#34; copy&#34;具有不同的内存地址)。

目前,替换 data.table的内容无法通过引用对任意data.tables进行,因为there is no way of modifying the number of rowstest和{test2可能不同{1}})通过引用。

在将data.table替换为具有相同行数的另一个的特殊情况下......

(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"

实现这一目标可能有一种更为光滑的方式,但我不确定这是一件值得做的事情。

答案 1 :(得分:-2)

只需退回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