【问题标题】:R rename an object / data.frame without intermediary objectR重命名没有中间对象的对象/ data.frame
【发布时间】:2014-10-05 22:27:08
【问题描述】:

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

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

【问题讨论】:

  • 看起来你不能在 R 中给变量起别名,但我想问一下为什么你不能在任何调用它的代码中找到 df2 并将其替换为 df1?跨度>
  • @user1477388:这是我最糟糕的情况。我害怕更换毛毯。你永远不知道你在那张网里钓到了什么鱼......
  • 只要您不更改数据框中的任何数据,这里的第一个答案应该会有所帮助:stackoverflow.com/questions/2717757/how-do-i-rename-an-r-object

标签: r performance object rename


【解决方案1】:

@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

【讨论】:

【解决方案2】:

当 R 复制一个对象时,它最初只是一个“软链接”(即该对象实际上并未被复制,而是简单地链接到另一个名称)。我怀疑删除原始实例会使重命名操作永久化(即删除软链接并按照最初的预期重命名对象)。因此,这种重命名操作不应增加内存消耗。

见:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-12
    • 2019-08-13
    • 1970-01-01
    • 2011-03-31
    • 2015-04-09
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多