R RDS文件大小远大于对象大小

时间:2015-05-24 06:05:51

标签: r

我有一个对象x,其中包含来自lmgbm等的矩阵列表和模型对象。object.size(x)仅显示大约50MB,但是saveRDS生成的文件大于250MB,大于5倍。通常,RDS文件比相应的对象大小大得多的常见原因是什么?我该怎么做才能最小化对象大小和文件大小之间的差异?

编辑:

我已经完全删除了我原来的问题,给出了一个可重现的例子(我知道代码是lapplying超过一个元素,但这是一个简化的例子)。似乎至少有两个问题:

1)生成的RDS文件大约是对应对象大小的2~3倍。

2)来自lapplymclapply的对象具有几乎相同的object.size,但对于从mclapply返回的对象,生成的文件大1.5倍。< / p>

由于fit1fit2的大小几乎相同,因此在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

0 个答案:

没有答案