Access object by address / pointer

前端 未结 1 1036
萌比男神i
萌比男神i 2020-12-30 09:12

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

library(data.table)

DT <- data.table(a = 1:10, b = letters[         


        
1条回答
  •  时光说笑
    2020-12-30 09:47

    This is somewhat of a silly way of doing it (as compared to how you can cast pointers in e.g. 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's 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
    

    0 讨论(0)
提交回复
热议问题