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"
我想找到一种在 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"