使用参考ID 0x00000000访问环境

时间:2018-11-22 04:02:55

标签: r environment

我有一个模型对象,该对象在硬盘中的大小大于R中的大小。经过一些搜索,我设法找到了问题原因,如下所示

format(object.size(JMFit1$model_info$coxph_components$TermsU), units='Mb')
[1] "0 Mb"
pryr::object_size(JMFit1$model_info$coxph_components$TermsU)
28.5 MB

但是JMFit1$model_info$coxph_components$TermsU返回

>JMFit1$model_info$coxph_components$TermsU
...
attr(,".Environment")
<environment: 0x0000000025035540>
...

因此,有什么方法可以使用参考ID(即“ 0x0000000025035540”)访问此环境,然后应用ls例如进行探索。

以下是我尝试Q1Q2时遇到的问题,但没有成功。另外,我已经尝试过blogls(envir=attr(lm.fit.full$terms, ".Environment")),但是由于以下错误

  

ls(envir = attr(JMFit1 $ model_info $ coxph_components $ TermsU,“ .Environment”))中的错误:     无效的“ envir”参数

完整模型:

library(JMbayes)
MixedModelFit1 <- mvglmer(list(log(serBilir) ~ year + (year | id)), data = pbc2, families = list(gaussian))
pbc2.id$Time <- pbc2.id$years
pbc2.id$event <- as.numeric(pbc2.id$status != "alive")
CoxFit <- coxph(Surv(Time, event) ~ drug + age, data = pbc2.id, model = TRUE)
JMFit1 <- mvJointModelBayes(MixedModelFit1, CoxFit, timeVar = "year")

在此先感谢您的任何建议或帮助。

1 个答案:

答案 0 :(得分:0)

这是一种方法,它不使用ref id,但可以正确使用blog方法:

ls(envir=attr(JMFit1$model_info$coxph_components$TermsU$`log(serBilir)_value`, ".Environment"))

要从该环境中获取对象,我们可以这样做:

env <- attr(JMFit1$model_info$coxph_components$TermsU$`log(serBilir)_value`, ".Environment")
#To get Data for example
d <- get("Data",envir=env)
> typeof(d)
[1] "list"
> format(object.size(d),units='Mb')
[1] "2.8 Mb"

但是,我仍然很好奇是否有使用ref id的方法,尤其是@Spacedman说here 试图通过它们的内存位置获取R对象是行不通的。,但我希望自2014年以来可能会有更新。