人们使用什么技巧来管理交互式R会话的可用内存?我使用下面的函数(基于Petr Pikal和David Hinds在2004年的“帮助列表”中发布的帖子)来列出(和/或排序)最大的对象,偶尔会使用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)
}
43
投票
subset在将数据框传递给data=回归函数的参数时,我只会选择所需的变量来积极使用参数。如果我忘记向公式和select=矢量添加变量,会导致一些错误,但是由于减少了对象的复制,并且显着减少了内存占用,所以仍然节省了大量时间。假设我有400万条记录和110个变量(我也是这样)例如:
# library(rms); library(Hmisc) for the cph,and rcs functions
Mayo.PrCr.rbc.mdl <-
cph(formula = Surv(surv.yr, death) ~ age + Sex + nsmkr + rcs(Mayo, 4) +
rcs(PrCr.rat, 3) + rbc.cat * Sex,
data = subset(set1HLI, gdlab2 & HIVfinal == "Negative",
select = c("surv.yr", "death", "PrCr.rat", "Mayo",
"age", "Sex", "nsmkr", "rbc.cat")
) )
通过设置上下文和策略的方式:gdlab2变量是一个逻辑向量,是为一组数据集中的受试者构建的,该变量对于一系列实验室测试具有所有正常或几乎正常的值,并且HIVfinal是一个总结艾滋病初步和确认性测试的特征向量。
确保您以可重复的脚本记录您的工作。不时地重新打开R,然后是source()你的脚本。你将清理掉不再使用的任何东西,并且作为附加的好处将会测试你的代码。