Há um comportamento estranho de lobstr::obj_addr causado por sua vetorização sobre listas, quando a própria lista não altera o endereço
Acabei de começar Advanced R de Wickham (2ª ed.) e cheguei ao primeiro exercício 2.2.2 Exercises. Eu supus que, dado:
a <- 1:10; b <- a; c <- b
todos eles teriam o mesmo endereço de memória recuperado pela lobstr::obj_addr
função. Isso é verdade se usarmos apenas a, b ou c como entradas, mas como sou preguiçoso e queria ter todos os valores de uma vez, fiz:
list(a, b, c) |> lapply(obj_addr) # lapply or sapply
Então obtemos um conjunto diferente de valores entre os diferentes nomes toda vez que a função é executada. Isso ainda acontece se definimos x <- list(a, b, c)
antes de chamar a função por meio de lapply
, e obj_addr(x[[1]]) == obj_addr(x[[2]]) == obj_addr(x[[3]]) == obj_addr(a)
, então não é uma questão de criar uma nova lista toda vez. Alguém sabe o que está acontecendo aqui? Eu entendo que até certo ponto cada chamada gera um novo objeto de saída que terá seu próprio endereço de memória, mas não sei como lapply
pode interferir em uma função constante para um determinado objeto como obj_addr
.
Agradeço antecipadamente!