文档章节

技巧以管理R会话中的可用内存

j
 javail
发布于 01/19 12:00
字数 923
阅读 18
收藏 0

人们使用什么技巧来管理交互式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, obj.size, obj.dim)
    names(out) <- c("Type", "Size", "Rows", "Columns")
    if (!missing(order.by))
        out <- out[order(out[[order.by]], decreasing=decreasing), ]
    if (head)
        out <- head(out, n)
    out
}
# shorthand
lsos <- function(..., n=10) {
    .ls.objects(..., order.by="Size", decreasing=TRUE, head=TRUE, n=n)
}

#1楼

  1. 我很幸运,仪器将大数据集保存在大约100 MB(32位二进制)的“块”(子集)中。 因此,在融合数据集之前,我可以依次进行预处理步骤(删除不具信息的部分,进行下采样)。

  2. 如果数据大小接近可用内存,则手动调用gc ()会有所帮助。

  3. 有时,不同的算法需要更少的内存。
    有时,向量化和内存使用之间需要权衡取舍。
    比较: splitlapplyfor循环。

  4. 为了快速,轻松地进行数据分析,我通常首先处理数据的一小部分随机子集( sample () )。 数据分析脚本/.Rnw完成后,数据分析代码和完整的数据将进入计算服务器进行整夜/周末/ ...计算。


#2楼

我使用data.table包。 使用其:=运算符,您可以:

  • 通过引用添加列
  • 按引用修改现有列的子集,并按引用修改组
  • 通过引用删除列

这些操作data.table没有复制(可能很大) data.table ,甚至没有一次。

  • 聚合也特别快,因为data.table使用的工作内存要少得多。

相关链接 :


#3楼

确保以可复制的脚本记录您的工作。 有时,请重新打开R,然后重新打开脚本的source() 。 您将清理掉不再使用的所有内容,另外的好处是可以测试您的代码。


#4楼

这是一个好把戏。

另一种建议是,尽可能使用内存有效的对象:例如,使用矩阵而不是data.frame。

这并没有真正解决内存管理问题,但是其中一个鲜为人知的重要功能是memory.limit()。 您可以使用此命令memory.limit(size = 2500)增加默认值,其中大小以MB为单位。 如Dirk所述,您需要使用64位才能真正利用此优势。


#5楼

我从不保存R工作区。 我使用导入脚本和数据脚本,并将我不想经常重新创建的任何特别大的数据对象输出到文件中。 这样,我总是从一个新的工作区开始,不需要清理大对象。 不过,这是一个非常好的功能。

本文转载自:https://cs.sofbug.com/question/5hHH

j
粉丝 5
博文 1103
码字总数 0
作品 0
深圳
私信 提问
"懒惰"Linux 管理员的 10 个关键技巧

转自:http://www.ibm.com/developerworks/cn/linux/l-10sysadtips/index.html 好的系统管理员区分在效率上。如果一位高效的系统管理员能在 10 分钟内完成一件他人需要 2 个小时才能完成的任...

flynewton
2010/09/28
530
1
SecureCRT使用技巧,包含比较高级的技巧 [转]

http://www.justwinit.cn/post/2815/ 1.打开secureCRT,按alt+b,可以调出快速启动栏。 2.按ctrl,可以同时选中多个session,再点击连接,可快速连接。 3.打开的第一个标签记为数字1,第二个...

junsun
2010/10/16
1W
1
Linux shell(监控和数据)

Linux shell 的监控和数据 监控程序: 1.进程查看:ps 但ps最强的的地方是它所带参数的结果。 参数 描述 -A 显示所有进程 -a 显示除会话标题和无终端进程外的所有进程。 -N 显示特定参数的结...

年少爱追梦
2016/03/01
123
3
memcached 系列知识 1

menmcache 【1】memcache软件客户端软件安装的是memcache 服务端软件安装的是memcached 【2】memcached的作用:在传统场景中 多数的web服务器都会将数据保存到 关系型数据库中,但随着数据量...

小辛linux
2018/06/26
0
0
Linux Screen超简明教程

一.screen是什么 Screen是Linux下的一款远程会话管理工具,可以在多个进程之间多路复用一个物理终端的全屏窗口管理器。它可以创建多个会话(Session),每个会话中可以创建多个窗口(Window)...

银月光海
2016/02/19
28
0

没有更多内容

加载失败,请刷新页面

加载更多

舞钢哪里可以开餐饮费发票-中国新闻网

舞钢哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723687
10分钟前
28
0
偃师哪里可以开餐饮费发票-中国新闻网

偃师哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723685
11分钟前
16
0
荥阳哪里可以开餐饮费发票-中国新闻网

荥阳哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723617
11分钟前
9
0
登封哪里可以开餐饮费发票-中国新闻网

登封哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17060820048
11分钟前
9
0
新密哪里可以开餐饮费发票-中国新闻网

新密哪里可以开餐饮费发票【139 * 7⒏ б2 * 15 З9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridg...

17054723479
12分钟前
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部