【发布时间】:2019-03-01 18:57:46
【问题描述】:
我想更新我的.Rprofile 以修改base::quit。 q 和quit 的正常行为是提示您询问是否要保存工作区。我想修改这些函数,使其默认不保存我的工作区,1 例如,通过如下修改函数:
q <- function(save = "no") {
quit(save = save)
}
quit <- function(save = "no") {
quit(save = save)
}
然而,这里有一个问题。 (我对R 有点陌生,所以我的描述可能并不完全准确。)函数q 和quit 被添加到全局环境中。因此,如果我调用ls(),这些函数将被包含在内。添加如下代码
environment(q) <- as.environment("package:base")
似乎将q 添加到base 命名空间。也就是说,我看到以下内容:
# > q
# function(save = "no", ...)
# {
# quit(save = save), ...)
# }
# <environment: base>
但是,当我调用 ls() 时,q 和 quit 仍然会出现,如果我调用 rm(list = ls()),那么 q 和 quit 都会恢复到它们在 base 中的原始定义。
我应该怎么做才能避免这种行为?我想修改 q 和 quit 以便它们仅在我调用 ls(name = "package:base") 时出现。
1 这有几个原因。我经常从命令行运行 R 来检查目录中的数据文件,我希望能够将每个文件都视为数据文件,因此不希望任何点文件使目录混乱。此外,我在控制台中所做的任何分析或清理都不太可能重现。
【问题讨论】:
-
好吧,如果这都是因为你想使用
rm(list=ls()),那么这可能就是问题所在。这不是你应该经常运行的命令。你有理由这样做吗?听起来您可能还有其他变量范围问题。您不能使自定义函数从全局环境中消失。您必须制作自己的包来“隐藏”这些功能。