【发布时间】:2018-05-04 09:45:39
【问题描述】:
我(也许是无知)对 R 的理解是函数会在内存中创建对象的临时副本。即使全局环境中的对象太大而无法复制,我如何仍然使用函数来简化代码?还是建议只对大对象的必要部分进行子集化以供函数操作?
例子
# load two objects with 10 million rows and 500 columns
big.object.1 <- readRDS(file = "previously.created.dataframe.1")
big.object.2 <- readRDS(file = "previously.created.dataframe.2")
# method 1 with memory use of ~xMB?
big.object.1$recoded.column <- ifelse(big.object.1$old.column > 0,
big.object.1$recoded.column * 2,
big.object.1$recoded.column * 0.5)
# method 2 with memory use of ~2xMB?
new.column_function <- function(data, old.col, recoded.col) {
data[recoded.col] <- ifelse(data[old.col] > 0,
data[recoded.col] * 2,
data[recoded.col] * 0.5)
}
new.column_function(data = big.object.1,
recoded.col = 400,
new.col = 401)
当代码很复杂但没有函数但内存是函数的问题时,最佳做法是什么?如何避免复制大对象?
【问题讨论】:
-
您可以尝试
data.table,当您的data.frame 存在内存问题时。:=,快速添加、删除和更新列子集,参考。 -
@incas56,你能举一个简单的例子作为答案吗?甚至可能将 data.frame 转换为 data.table,然后按照上面指定的方式操作 data.table?谢谢。
标签: r function memory large-data