R重命名没有中间对象的对象/ data.frame

scr*_*Owl 10 performance r rename object

我正在尝试重命名一个大的R对象(data.frame~9GB)以匹配已经编写的一些代码.使用名称保存对象,df1并编写代码以查找名为的对象df2.

我在这里找到的唯一建议是建议创建一个新的,正确命名的对象版本.鉴于内存限制,这不是一个选项.有没有办法在结构本身的某处更改对象的名称,或者可能是某种浅层副本?任何建议,将不胜感激.

Mat*_*rde 12

@landroni回答了这个问题.这是一个例子,表明这确实是R的工作原理.

# copy an object to a new variable name, no change in memory usage
rm(list=ls())
gc()
memory.size()
# [1] 40.15
big.obj <- seq(1e7)
memory.size()
# [1] 78.34
big.obj.renamed <- big.obj
memory.size()
# [1] 78.34
rm(big.obj)
memory.size()
# [1] 78.34


# if the first variable is modified, however, you see the evidence of a hard copy
rm(list=ls())
gc()
memory.size()
# [1] 40.15
big.obj <- seq(1e7)
memory.size()
# [1] 78.34
big.obj.renamed <- big.obj
memory.size()
# [1] 78.34
big.obj[1] <- 2 # modifying the original forces hard copy
memory.size()
# [1] 192.8
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅`pryr :: object_size()`以及http://adv-r.had.co.nz/memory.html#object-size中的讨论 (2认同)

lan*_*oni 11

当R创建一个对象的副本时,它最初只是一个"软链接"(即该对象实际上没有复制,只是链接到另一个名称).我怀疑删除原始实例会使重命名操作永久化(即删除软链接并按最初的意图重命名对象).因此,在这种重命名操作时,内存消耗不应增加.

看到: