我对锁绑定变量进行了一些研究,并发现了以下选项(见下文)。有人知道一种方法,我可以在默认情况下锁定变量?如果使用(<-%)这样的简单表达式,我可以绕过锁定吗?
# option 1
library(pryr)
xvar %<c-% 10
xvar
xvar <- 11
# option 2
remove(list = ls())
xvar <- 10
xvar
## [1] 2
lockBinding('xvar', .GlobalEnv)
xvar <- 11
# my preferred option
remove(list = ls())
xvar <- 10
xvar <- 11
# "Error: cannot change value of locked binding for 'xvar'"
xvar <-% 11
xvar
#11发布于 2020-10-04 12:23:54
在R中,您可以覆盖任何函数,甚至是基R的函数。
因此,在控制台内:
library(pryr)
`<-` <- pryr::`%<c-%` 将完成这一任务,在全局env中具有压倒性。
如果您想把它放在全局env之外,那么生成一个导出<-的包就可以做到这一点。因此,创建一个新的包并将其放在代码中:
`<-` <- function (x, value)
{
assign("name",substitute(x))
if (!is.name(name))
stop("Left-hand side must be a name")
assign("env",parent.frame())
assign(as.character(name), value, env)
lockBinding(name, env)
invisible(value)
}(它是用赋值修改的pryr 1)
然后写下
export(`<-`)在它的命名空间内。
如果您想要自动完成任务,RR-4.0.2\etc中的RProfile.site文件是在每个R会话开始时加载的脚本。所以你可以在那里写library(thenameyouhavechosenforyourpackage)。
在R会话中,分离包将结束这种行为。
https://stackoverflow.com/questions/64193749
复制相似问题