有没有办法在你的命名空间中定义一个R中的变量,这样它就不会被覆盖(也许是一个“最终”声明)?类似于以下的伪代码:
> xvar <- 10
> xvar
[1] 10
xvar <- 6
> "Error, cannot overwrite this variable unless you remove its finality attribute"
动机:多次运行R脚本时,有时很容易无意中覆盖变量。
答案 0 :(得分:12)
结帐? lockBinding
:
a <- 2
a
## [1] 2
lockBinding('a', .GlobalEnv)
a <- 3
## Error: cannot change value of locked binding for 'a'
及其补充,unlockBinding
:
unlockBinding('a', .GlobalEnv)
a <- 3
a
## [1] 3
答案 1 :(得分:7)
您可以使用pryr
包使变量保持不变。
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
的便捷包装。
就像巴蒂斯特在评论中所说:如果你遇到这个问题,这可能是编码风格不佳的迹象。将大部分逻辑捆绑到函数中将减少变量名称冲突。