首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:避免意外覆盖变量

R:避免意外覆盖变量
EN

Stack Overflow用户
提问于 2014-02-20 15:14:10
回答 2查看 2K关注 0票数 11

是否有任何方法在您的名称空间中定义R中的变量,使其不能被覆盖(可能是ala“最终”声明)?类似于下面的psuedocode:

代码语言:javascript
复制
> xvar <- 10
> xvar
[1] 10
xvar <- 6
> "Error, cannot overwrite this variable unless you remove its finality attribute"

动机:当多次运行R脚本时,有时很容易在不经意间覆盖变量。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 15:35:19

查看? lockBinding

代码语言:javascript
复制
a <- 2
a
## [1] 2
lockBinding('a', .GlobalEnv)
a <- 3
## Error: cannot change value of locked binding for 'a'

及其补体,unlockBinding

代码语言:javascript
复制
unlockBinding('a', .GlobalEnv)
a <- 3
a
## [1] 3
票数 12
EN

Stack Overflow用户

发布于 2014-02-20 15:35:10

可以使用pryr包使变量常量。

代码语言:javascript
复制
install_github("pryr")
library(pryr)

xvar %<c-% 10
xvar
## [1] 10
xvar <- 6
## Error: cannot change value of locked binding for 'xvar'

%<c-%运算符是assign + lockBinding的方便包装器。

就像巴普蒂斯特在评论中说的:如果你在这方面有问题,这可能是一个糟糕的编码风格的迹象。将大部分逻辑绑定到函数中将减少变量名称冲突。

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

https://stackoverflow.com/questions/21911863

复制
相关文章

相似问题

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