首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >默认情况下,锁绑定变量

默认情况下,锁绑定变量
EN

Stack Overflow用户
提问于 2020-10-04 10:56:04
回答 1查看 86关注 0票数 0

我对锁绑定变量进行了一些研究,并发现了以下选项(见下文)。有人知道一种方法,我可以在默认情况下锁定变量?如果使用(<-%)这样的简单表达式,我可以绕过锁定吗?

代码语言:javascript
运行
复制
# 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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-04 12:23:54

在R中,您可以覆盖任何函数,甚至是基R的函数。

因此,在控制台内:

代码语言:javascript
运行
复制
library(pryr)
`<-` <- pryr::`%<c-%` 

将完成这一任务,在全局env中具有压倒性。

如果您想把它放在全局env之外,那么生成一个导出<-的包就可以做到这一点。因此,创建一个新的包并将其放在代码中:

代码语言:javascript
运行
复制
`<-` <- 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)

然后写下

代码语言:javascript
运行
复制
export(`<-`)

在它的命名空间内。

如果您想要自动完成任务,RR-4.0.2\etc中的RProfile.site文件是在每个R会话开始时加载的脚本。所以你可以在那里写library(thenameyouhavechosenforyourpackage)

在R会话中,分离包将结束这种行为。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64193749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档