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 中:is.data.frame(data) 中的错误:找不到对象'',C5.0 绘图