gpt4 book ai didi

r - 避免传递数据框的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-04 00:45:51 26 4
gpt4 key购买 nike

我有 12 data.frame一起工作。它们很相似,我必须对每一个都做同样的处理,所以我写了一个函数,它接受 data.frame ,处理它,然后返回一个 data.frame .这有效。但恐怕我正在绕过一个非常大的结构。我可能正在制作临时副本(是吗?)这效率不高。避免传递 data.frame 的最佳方法是什么?周围?

doSomething <- function(df) {
// do something with the data frame, df
return(df)
}

最佳答案

您确实是在传递对象并使用一些内存。但我不认为你可以在不传递对象的情况下对 R 中的对象进行操作。即使您没有创建函数并在函数之外进行操作,R 的行为也基本相同。

看到这一点的最好方法是建立一个例子。如果您在 Windows 中打开 Windows 任务管理器。如果您使用的是 Linux,请打开终端窗口并运行 top 命令。在这个例子中,我将假设 Windows。在 R 中运行以下命令:

col1<-rnorm(1000000,0,1)
col2<-rnorm(1000000,1,2)
myframe<-data.frame(col1,col2)

rm(col1)
rm(col2)
gc()

这将创建两个称为 col1 和 col2 的向量,然后将它们组合成一个名为 myframe 的数据框。然后它删除向量并强制垃圾收集运行。在 Windows 任务管理器中查看 Rgui.exe 任务的内存使用情况。当我启动 R 时,它使用大约 19 兆的内存。运行上述命令后,我的机器为 R 使用了不到 35 兆。

现在试试这个:
myframe<-myframe+1

您对 R 的内存使用量应该超过 144 兆。如果您使用 gc() 强制垃圾收集,您将看到它回落到大约 35 兆。要使用函数尝试此操作,您可以执行以下操作:
doSomething <- function(df) {
df<-df+1-1
return(df)
}
myframe<-doSomething(myframe)

当你运行上面的代码时,内存使用量会上升到 160 兆左右。运行 gc() 会将其降回 35 兆。

那么如何看待这一切呢?好吧,在函数之外执行操作并不比在函数中执行更有效(就内存而言)。垃圾收集清理东西真的很好。你应该强制 gc() 运行吗?可能不会因为它会根据需要自动运行,我只是在上面运行它以显示它如何影响内存使用。

我希望这有帮助!

关于r - 避免传递数据框的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/596819/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com