r - 修改 base::quit 默认值
问题描述
我想更新我.Rprofile
的修改base::quit
。q
和的正常行为quit
是提示您询问是否要保存工作区。我想修改这些函数,使它们默认不保存我的工作区,例如,通过如下修改函数:
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
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()}
因为它是附加的,所以在某个地方仍然有对它的引用。我认为。不管怎样,试试吧。
推荐阅读
- c - 有什么方法可以取消引用 C 中的内存地址吗?
- ubuntu - Buildozer 在 W10 上的 Lubuntu VM 上出现错误
- java - 如何让 ScheduleTask 在某个时间执行一次任务?
- android - Api 刷新和内存不足错误
- qt - PyQt5 Qthread 创建
- reactjs - React 中的父子关系
- sdk - 在 azure bot 框架 SDK V4 中将 Bot 移交给人类
- powerbi - Power bi sql 实时数据点播
- r - r gganimate:transition_reveal(更改标题)
- swift - Xcode UITest:如何断言标签有粗体文本?