Access object at address / pointer

Can I access the data.table object created in the current R session by its memory address or pointer?

library(data.table) DT <- data.table(a = 1:10, b = letters[1:10]) address(DT) # [1] "0x6bf9b90" attr(DT,".internal.selfref",TRUE) # <pointer: 0x2655cc8> 
+7
r data.table
source share
1 answer

This is a dumb way to do this (compared to how you can impose pointers, for example, in C ++), but you could do:

 # recursively iterate over environments find.by.address = function(addr, env = .GlobalEnv) { idx = which(sapply(ls(env), function(x) address(get(x, env = env))) == addr) if (length(idx) != 0) return (get(ls(env)[idx], env = env)) # didn't find it, let iterate over the other environments idx = which(sapply(ls(env), function(x) is.environment(get(x, env = env)))) for (i in idx) { res = find.by.address(addr, get(ls(env)[i], env = env)) if (res != "couldn't find it") return (res) } return ("couldn't find it") } DT = data.table(a = 1) e = new.env() e$DT = data.table(b = 2) e$f = new.env() e$f$DT = data.table(c = 2) find.by.address(address(DT)) # a #1: 1 find.by.address(address(e$DT)) # b #1: 2 find.by.address(address(e$f$DT)) # c #1: 2 
+3
source share

All Articles