【问题标题】:`objects()` in R vs. SplusR 与 Splus 中的 `objects()`
【发布时间】:2011-07-20 18:12:59
【问题描述】:

我想编写一个脚本main.r,将工作空间返回到运行前的状态(即,在脚本结束时,删除所有且仅删除已添加到工作空间的对象) .运行以下:

#main.r
initial.objects <- objects()
tmp1 <- 1
remove(list = setdiff(objects(), initial.objects)

从 R 控制台通过source('main.r') 可以按需要工作。但是,这在 Splus 中不起作用,tmp1 留在工作目录中(当我单独运行每一行而不是获取整个文件时它确实起作用)。进一步调查,我发现在 R objects() 中,即使在调用 source() 的中间,也会跟踪进入工作区的对象。在 Splus 中,objects() 似乎直到 source() 调用结束时才“知道”已添加到工作区的对象。

问:发生了什么事?我该怎么做才能得到类似于main.r 在 Splus 工作的东西?

【问题讨论】:

    标签: r s-plus


    【解决方案1】:

    我不确定您要在这里做什么,但重新加载环境的最佳方法是保存并重新加载它。

    save("pre-environ.Rdata")
    ## Your script goes here
    rm(list=ls()) ## clean the environment
    ## Reload the original environ at end of your script
    load("pre-environ.Rdata")
    

    【讨论】:

    • 这当然看起来更容易。在 Splus 中,saveload 被替换为 data.dumpdata.restore
    • 删除时,不要忘记以'.'开头的变量:rm(list=ls(all.names=TRUE))
    • 感谢伊恩的补充,不过,我会说使用“。”风格很差,尤其是当它产生这样的额外考虑时!
    猜你喜欢
    • 2014-02-25
    • 2014-02-25
    • 2023-04-04
    • 2017-07-26
    • 2011-07-17
    • 2011-08-07
    • 1970-01-01
    • 2011-10-22
    • 2014-02-26
    相关资源
    最近更新 更多