[R]  There is a relationship of the Modify-in-place optimisation of a object and the local variable `*tmp*`?
    Duncan Murdoch 
    murdoch@dunc@n @end|ng |rom gm@||@com
       
    Fri Oct  8 11:58:35 CEST 2021
    
    
  
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
    
    
More information about the R-help
mailing list