Ваш код не поменяет местами x
и y
.
Обратите внимание, что нам не нужен Rcpp для обмена x
и y
без копирования.Мы можем сделать это в прямой R, как показано ниже.x
изначально имеет адрес 0x16d9fa08, а y
изначально имеет адрес 0x170291d8, и после свопинга, выполненного в R, их адреса обмениваются, и все под ними остается с адресами, изначально связанными с теми же родительскими адресами, т.е.по оригинальным адресам и не был скопирован.
library(pryr)
x <- data.frame(a = 1:2)
y <- data.frame(y = 3:4)
inspect(x)
## <VECSXP 0x16d9fa08>
## <INTSXP 0x1459a5b0>
## attributes:
## <LISTSXP 0x1203a7c0>
## ...snip...
inspect(y)
## <VECSXP 0x170291d8>
## <INTSXP 0x12039288>
## attributes:
## <LISTSXP 0x14894a10>
## ...snip...
tmp <- x
x <- y
y <- tmp
inspect(x)
## <VECSXP 0x170291d8>
## <INTSXP 0x12039288>
## attributes:
## <LISTSXP 0x14894a10>
## ...snip...
inspect(y)
## <VECSXP 0x16d9fa08>
## <INTSXP 0x1459a5b0>
## attributes:
## <LISTSXP 0x1203a7c0>
## ...snip...