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

Posted

技术标签:

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

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

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

【问题讨论】:

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

【讨论】:

另见pryr::object_size()和adv-r.had.co.nz/memory.html#object-size中的讨论【参考方案2】:

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

见:

How do I rename an R object?

【讨论】:

以上是关于R重命名没有中间对象的对象/ data.frame的主要内容,如果未能解决你的问题,请参考以下文章

用 R 迭代地保存 .Rds data.frame 对象

在 R 中:is.data.frame(data) 中的错误:找不到对象'',C5.0 绘图

Java对象类似于R data.frame [关闭]

如何重命名 R 对象?

根据存储在 data.frame 中的单独字符向量,有条件地重命名列表中的列

是否可以编写一个函数来从 data.frame 对象创建栅格文件?