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

时间:2014-08-12 18:13:40

标签: r performance object rename

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:11)

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

见: