R swap 2 data.table 不使用临时变量

R swap 2 data.table without using temporary variable

我想找到一种在 R 中交换 2 data.table 的简单方法。

我可以像下面那样做,但我需要使用临时变量 tmp

# Swap a and b
tmp <- copy(a)
a <- copy(b)
b <- copy(tmp)

R 是否支持任何交换功能?

不使用临时变量对你有什么好处吗?我的意思是你可以在不使用第三个变量的情况下做到这一点:

df1 <- data.frame(a = c(1,2,3), b = c(2,3,4))
df2 <- data.frame(c = c(1,2), d = c(2,3))
df1 <- list(df1, df2)
df2 <- df1[[1]]
df1 <- df1[[2]]
df1
c d
1 1 2
2 2 3
df2
  a b
1 1 2
2 2 3
3 3 4

我们将两个 data.frames 都保存到一个列表中,而不是两个 data frames 中的一个,然后我们可以通过将另一个 data frame 保存到第二个变量中来交换顺序,然后保留第一个变量剩下的内容。

感谢 R 的 copy-on-modify-only 语义,您可以从表达式中删除 copy,它仍然有效,不会实际复制 data使用任何版本的 R(列表答案也不会复制从版本 3.1 开始的数据):

dt1 = data.table(a = 1)
dt2 = data.table(b = 2)
address(dt1)
#[1] "000000000FDCA298"
address(dt2)
#[1] "000000000F7EC2E8"

tmp = dt1
dt1 = dt2
dt2 = tmp

address(dt1)
#[1] "000000000F7EC2E8"
address(dt2)
#[1] "000000000FDCA298"