人们用什么技巧来管理交互式R会话的可用内存?我使用下面的函数[根据Petr Pikal和David Hinds在2004年的r-help列表中的帖子]列出(和/或排序)最大的对象,偶尔列出rm()其中的一些.但到目前为止,最有效的解决方案是在具有充足内存的64位Linux下运行.
人们想分享其他任何好玩的伎俩吗?请发一个帖子.
# improved list of objects
.ls.objects <- function (pos = 1, pattern, order.by,
decreasing=FALSE, head=FALSE, n=5) {
napply <- function(names, fn) sapply(names, function(x)
fn(get(x, pos = pos)))
names <- ls(pos = pos, pattern = pattern)
obj.class <- napply(names, function(x) as.character(class(x))[1])
obj.mode <- napply(names, mode)
obj.type <- ifelse(is.na(obj.class), obj.mode, obj.class)
obj.size <- napply(names, object.size)
obj.dim <- t(napply(names, function(x)
as.numeric(dim(x))[1:2]))
vec <- is.na(obj.dim)[, 1] & (obj.type != "function")
obj.dim[vec, 1] <- napply(names, length)[vec]
out <- data.frame(obj.type, …Run Code Online (Sandbox Code Playgroud) 有没有人对与自定义报告编写相关的数据分析工作流程有任何了解?用例基本上是这样的:
客户委托使用数据分析的报告,例如人口估计和水区的相关地图.
分析人员下载一些数据,对数据进行检测并保存结果(例如,为每个单位添加一列,或根据区域边界对数据进行子集化).
分析师分析了(2)中创建的数据,接近她的目标,但看到需要更多数据,因此可以追溯到(1).
冲洗重复,直到表格和图形符合QA/QC并满足客户要求.
编写包含表格和图形的报告.
明年,快乐的客户回来了,想要更新.这应该像通过新下载更新上游数据一样简单(例如,从去年获得建筑许可),并按下"RECALCULATE"按钮,除非规格发生变化.
目前,我只是开始一个目录,并尽我所能.我想要一个更系统化的方法,所以我希望有人能够解决这个问题......我使用了电子表格,SQL,ARCGIS,R和Unix工具.
谢谢!
PS:
下面是一个基本的Makefile,用于检查各种中间数据集(带.RData后缀)和脚本(.R后缀)的依赖关系.使用时间戳来检查依赖关系,因此,如果您touch ss07por.csv,它将看到此文件比依赖它的所有文件/目标更新,并执行给定的脚本以便相应地更新它们.这仍然是一项正在进行的工作,包括放入SQL数据库的步骤,以及像sweave这样的模板语言的步骤.请注意,Make依赖于语法中的选项卡,因此请在剪切和粘贴之前阅读手册.享受并提供反馈!
http://www.gnu.org/software/make/manual/html_node/index.html#Top
R=/home/wsprague/R-2.9.2/bin/R
persondata.RData : ImportData.R ../../DATA/ss07por.csv Functions.R
$R --slave -f ImportData.R
persondata.Munged.RData : MungeData.R persondata.RData Functions.R
$R --slave -f MungeData.R
report.txt: TabulateAndGraph.R persondata.Munged.RData Functions.R
$R --slave -f TabulateAndGraph.R > report.txt
我定期用R调用来清理R中的内存rm(list=ls()).
之后我需要打电话给垃圾收集器gc()吗?
这两个功能有什么区别?是否gc()要求rm()某些变量?
我使用了一些变量,但是当它被使用时,我再也不需要它了,所以我需要删除它并释放内存,但函数rm()似乎没有帮助:
memory.size()
30.69
tmp=matrix(rnorm(6e5*20),6e5,20)
memory.size()
207.64
rm(tmp)
memory.size()
207.64
Run Code Online (Sandbox Code Playgroud)
这是否意味着我删除了tmp但内存没有被释放?
可能重复:
使用gc()命令强制垃圾收集在R中运行
我想知道我的一些代码是否会从执行垃圾收集中受益 - 即
> gc()
Run Code Online (Sandbox Code Playgroud)
从gc帮助中,我读到"gc调用导致垃圾收集发生.这也将在没有用户干预的情况下自动进行,调用gc的主要目的是报告内存使用情况".
我非常小心地在不再需要它们之后删除它们,但我觉得我的操作速度在会话期间继续减少.我没有注意到通过定期使用gc()得到了实质性的改进 - 从上面的描述可以看出,这种操作有时会自动发生.有没有人对它的正确应用有什么建议?
干杯
在R中,我试图将几组时间序列数据组合并转换为xts来自http://www.truefx.com/?page=downloads但是,文件很大并且有很多文件因此这导致了我的问题我的笔记本电脑.它们存储为csv文件,已压缩为zip文件.
下载它们并解压缩它们很容易(尽管在硬盘驱动器上占用了大量空间).
将一个月的350MB +文件加载到R中,可以合理地直接使用包中的新fread()功能data.table.
完成一些数据表转换(在函数内部),以便可以轻松读取时间戳并生成中间列.然后将数据表保存为硬盘驱动器上的RData文件,并将从工作空间中删除对数据表对象的所有引用,并gc()在删除后运行a ...但是在我的Activity Monitor中查看R会话时(运行)来自Mac)...它看起来仍然占用了近1GB的内存......而且事情看起来有点滞后......我打算同时加载几年的csv文件,转换它们可用的数据表,组合它们,然后创建一个单独的xts对象,如果只有一个月使用1GB的RAM,这似乎是不可行的.
我知道我可以顺序下载每个文件,转换它,保存它关闭R并重复,直到我有一堆RData文件,我可以加载和绑定,但希望可能有一个更有效的方式来做到这一点,删除对数据表的所有引用后,您将返回"正常"或启动RAM使用级别.清除记忆的方法有gc()哪些?任何建议将不胜感激.
我正在尝试创建一个函数,该函数将同时清除工作区和内存,这样我就不必键入“rm(list = ls()); gc()”,而只需键入一个函数。但是 rm(list = ls()) 从函数内部调用时不起作用。为什么?有没有办法解决?
> # Let's create an object
> x = 0
> ls()
[1] "x"
>
> # This works fine:
> rm(list = ls()); gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 269975 14.5 592000 31.7 427012 22.9
Vcells 474745 3.7 1023718 7.9 808322 6.2
> ls()
character(0)
>
> ## But if I try to create a function to do exactly the same thing, it doesn't work
> # …Run Code Online (Sandbox Code Playgroud)