我有一个对象x
,其中包含来自lm
和gbm
等的矩阵列表和模型对象。object.size(x)
仅显示大约50MB,但是saveRDS
生成的文件大于250MB,大于5倍。通常,RDS文件比相应的对象大小大得多的常见原因是什么?我该怎么做才能最小化对象大小和文件大小之间的差异?
编辑:
我已经完全删除了我原来的问题,给出了一个可重现的例子(我知道代码是lapplying
超过一个元素,但这是一个简化的例子)。似乎至少有两个问题:
1)生成的RDS文件大约是对应对象大小的2~3倍。
2)来自lapply
和mclapply
的对象具有几乎相同的object.size
,但对于从mclapply
返回的对象,生成的文件大1.5倍。< / p>
由于fit1
和fit2
的大小几乎相同,因此在R中检查其组件的大小似乎并没有太大帮助。有没有人建议如何调试这个问题?
library(doParallel)
library(data.table)
library(caret)
fitModels <- function(dmy, dat, file.name) {
methods <- list(
list(method = 'knn', tuneLength = 1),
list(method = 'svmRadial', tuneLength = 1)
)
opts <- list(
form = as.formula('X1 ~ .'),
data = as.data.frame(dat),
trControl = trainControl(method = 'none', returnData = F)
)
fit <- mclapply(methods, function(x) do.call(train, c(opts, x)), mc.cores = 2)
saveRDS(fit, paste(file.name, 'rds', sep = '.'))
return(fit)
}
dat <- data.frame(matrix(rnorm(5e4), nrow = 1e3))
fit1 <- lapply(1, fitModels, dat, file.name = 'test1')
fit2 <- mclapply(1, fitModels, dat, file.name = 'test2', mc.cores = 1)
print(object.size(fit1))
print(object.size(fit2))
print(file.info('test1.rds')$size)
print(file.info('test2.rds')$size)
输出结果为:
2148744 bytes
2149208 bytes
[1] 4659831
[1] 6968437