Objects in R are considered reachable if they can be accessed by following
a chain of references, starting from a root node; root nodes are
specially-designated R objects, and include the global environment and base
environment. As long as the key is reachable, the value will not be garbage
collected. This is true even if the weak reference object becomes
unreachable. The key effectively prevents the weak reference and its value
from being collected, according to the following chain of ownership:
weakref <- key -> value.
When the key becomes unreachable, the key and value in the weak reference
object are replaced by
NULL, and the finalizer is scheduled to execute.
new_weakref(key, value = NULL, finalizer = NULL, on_quit = FALSE)
The key for the weak reference. Must be a reference object -- that is, an environment or external pointer.
The value for the weak reference. This can be
A function that is run after the key becomes unreachable.
Should the finalizer be run when R exits?
e <- env() # Create a weak reference to e w <- new_weakref(e, finalizer = function(e) message("finalized")) # Get the key object from the weak reference identical(wref_key(w), e)#>  TRUE# When the regular reference (the `e` binding) is removed and a GC occurs, # the weak reference will not keep the object alive. rm(e) gc()#> used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) #> Ncells 847040 45.3 1541664 82.4 NA 1541664 82.4 #> Vcells 1617714 12.4 8388608 64.0 16384 3071013 23.5#>  TRUE# A weak reference with a key and value. The value contains data about the # key. k <- env() v <- list(1, 2, 3) w <- new_weakref(k, v) identical(wref_key(w), k)#>  TRUE#>  TRUE#> used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) #> Ncells 847162 45.3 1541664 82.4 NA 1541664 82.4 #> Vcells 1617464 12.4 8388608 64.0 16384 3071013 23.5#>  TRUE#> used (Mb) gc trigger (Mb) limit (Mb) max used (Mb) #> Ncells 847179 45.3 1541664 82.4 NA 1541664 82.4 #> Vcells 1617486 12.4 8388608 64.0 16384 3071013 23.5#>  TRUE#>  TRUE