On 07/10/2021 6:46 p.m., Ben Deivide de Oliveira Batista wrote:
Dear R users,
When modify-in-place of objects occurs, is there a local variable called
`*tmp*`, behind the scenes R? Let's look at two examples to understand the
question.
Example 1 (R Language Definition)
--------------------------------------------------
x <- 1:10
tracemem(x)
[1] "<000000000798F758>"
x[3:5] <- 13:15
tracemem[0x000000000798f758 -> 0x0000000008207030]:
The result of this command is as if the following had been executed
`*tmp*` <- x
x <- "[<-"(`*tmp*`, 3:5, value=13:15)
rm(`*tmp*`)
Conclusion: Here copy-on-modify occurs!
Example 2 : Modify-in-place
-----------------------
x <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
tracemem(x)
[1] "<0000000008BFB818>"
x[3:5] <- 13:15Conclusion: Here modify-in-place occurs!
For example 2, is there a local variable `*tmp*` for this case? If so,
what would the syntactic representation look like, similar to example 1?
I think there is, and it would be the same as in 1. The memory
operations are different because x is different: in 1, it is stored in
a compact representation of 1:10, which needs to be expanded to a full
array of doubles before the entries can be changed. In 2, it is already
stored as an array of doubles so this isn't needed.
Duncan Murdoch
______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.