在R中执行生存分析时,报告拟合模型要消耗比返回的实际对象更多的内存。而且,这似乎只会发生几次,而不是每次都发生。
require(survival)
require(pryr)
require(tidyverse)
dat <- tibble(
x = sample(letters[1:2], 1e5, replace = TRUE),
x2 = sample(LETTERS[1:2], 1e5, replace = TRUE),
e = sample(0:1, 1e5, replace = TRUE),
t = rweibull(1e5, shape = 1)
)
mem_change(fit <- survfit(formula = Surv(t, e) ~ x, data = dat))
mem_change(fit2 <- survfit(formula = Surv(t, e) ~ x, data = dat))
mem_change(fit3 <- survfit(formula = Surv(t, e) ~ 1, data = dat))
mem_change(fit4 <- survfit(formula = Surv(t, e) ~ x2, data = dat))
mem_change(fit5 <- survfit(formula = Surv(t, e) ~ x + x2, data = dat))
map(list(fit, fit2, fit3, fit4, fit5), object_size)
object_size(fit, fit2, fit3, fit4, fit5)
在fit
和fit5
的情况下,pryr::mem_change()
将报告〜7.5 MB的更改,而每个fitX
对象具有6.4 MB,如{{1 }}。
是否在其他地方创建了任何隐藏变量,或者它是否与pryr::object_size()
的C实现有关?
编辑:我知道,实际的建模过程可能会暂时消耗更多内存。但是,假定survfit
将在所有计算完成并且所有临时对象都被丢弃之后,返回使用的内存中的净变化。