在 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,如pryr::object_size()
. 是否在其他地方创建了任何隐藏变量,或者它是否与 C 实现有关survfit
?
编辑:我知道,实际的建模过程可能会暂时消耗更多的内存。但是,pryr::mem_change()
假设在所有计算完成并且所有临时对象都被丢弃之后返回已用内存的净变化。