修改 base::quit 个默认值
Modifying base::quit defaults
我想更新我的 .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 检查目录中的数据文件,我希望在这些目录中每个文件都是数据文件,因此不希望任何点文件使目录混乱。此外,我在控制台中进行的任何分析或清理都不可能重现。
尝试以下操作 - 它在提示符下有效但未在启动脚本中测试:
创建新环境:
> e = new.env()
在那个环境中创建一个退出函数。调用 base::quit
停止无限循环:
> assign("quit",function(){base::quit()},envir=e)
此时"quit"仍是基戒:
> quit
function (save = "default", status = 0, runLast = TRUE)
.Internal(quit(save, status, runLast))
<bytecode: 0x55c7741932f8>
<environment: namespace:base>
所以我们附上环境:
> attach(e)
The following object is masked from package:base:
quit
现在退出就是我们的退出:
> quit
function(){base::quit()}
我们工作区中唯一的东西是e
:
> ls()
[1] "e"
但我们可以删除它:
> rm(e)
> ls()
character(0)
我们的 quit
仍然是我们的 quit
:
> quit
function(){base::quit()}
因为它是附件,所以在某处仍然有对它的引用。我认为。不管怎样,试试吧。
我想更新我的 .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 检查目录中的数据文件,我希望在这些目录中每个文件都是数据文件,因此不希望任何点文件使目录混乱。此外,我在控制台中进行的任何分析或清理都不可能重现。
尝试以下操作 - 它在提示符下有效但未在启动脚本中测试:
创建新环境:
> e = new.env()
在那个环境中创建一个退出函数。调用 base::quit
停止无限循环:
> assign("quit",function(){base::quit()},envir=e)
此时"quit"仍是基戒:
> quit
function (save = "default", status = 0, runLast = TRUE)
.Internal(quit(save, status, runLast))
<bytecode: 0x55c7741932f8>
<environment: namespace:base>
所以我们附上环境:
> attach(e)
The following object is masked from package:base:
quit
现在退出就是我们的退出:
> quit
function(){base::quit()}
我们工作区中唯一的东西是e
:
> ls()
[1] "e"
但我们可以删除它:
> rm(e)
> ls()
character(0)
我们的 quit
仍然是我们的 quit
:
> quit
function(){base::quit()}
因为它是附件,所以在某处仍然有对它的引用。我认为。不管怎样,试试吧。