R交换2 data.table而不使用临时变量

时间:2015-04-05 12:12:42

标签: r data.table swap

我想找到一种在R。

中交换2 data.table的简单方法

我可以如下所示,但我需要使用临时变量tmp

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

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

2 个答案:

答案 0 :(得分:4)

感谢R的仅限复制修改语义,您可以从表达式中删除copy,它仍然有效,并且实际上不会复制数据任何版本的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"

答案 1 :(得分:3)

是不是使用临时变量对你有好处?我的意思是你可以不使用第三个变量来做到这一点:

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保存到第二个变量中来交换订单,然后保留在第一个变量上留下了什么。