Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:避免意外覆盖变量_R_Namespaces_Overwrite - Fatal编程技术网

R:避免意外覆盖变量

R:避免意外覆盖变量,r,namespaces,overwrite,R,Namespaces,Overwrite,有没有办法在名称空间的R中定义一个变量,这样它就不能被覆盖(可能是一个“最终”声明)?类似于以下psuedocode的代码: > xvar <- 10 > xvar [1] 10 xvar <- 6 > "Error, cannot overwrite this variable unless you remove its finality attribute" >xvar xvar [1] 10 xvar“错误,除非删除其finality属性,否则无法覆盖此变量

有没有办法在名称空间的R中定义一个变量,这样它就不能被覆盖(可能是一个“最终”声明)?类似于以下psuedocode的代码:

> xvar <- 10
> xvar
[1] 10
xvar <- 6
> "Error, cannot overwrite this variable unless you remove its finality attribute"
>xvar xvar
[1] 10
xvar“错误,除非删除其finality属性,否则无法覆盖此变量”

动机:当多次运行R脚本时,有时很容易无意中覆盖变量。

您可以使用
pryr
包将变量设置为常量

install_github("pryr")
library(pryr)

xvar %<c-% 10
xvar
## [1] 10
xvar <- 6
## Error: cannot change value of locked binding for 'xvar'
install\u github(“pryr”)
图书馆(普赖尔)

xvar%是否签出
?锁绑定

a <- 2
a
## [1] 2
lockBinding('a', .GlobalEnv)
a <- 3
## Error: cannot change value of locked binding for 'a'
unlockBinding('a', .GlobalEnv)
a <- 3
a
## [1] 3

函数式语言的最佳实践是尽可能避免全局变量。使用函数,内部所做的更改不会影响您的全局环境。请注意可能的副作用。(就像不小心解锁了不该解锁的东西)@CarlWitthoft似乎是个好建议,但你有例子吗?如果我能找到,我会:-(.Joran在一两周前讨论了另一个SO问题。OTOH,它不在R-Inferno中,所以我可能过于谨慎。有没有一种方法可以自动锁定所有创建的变量?并且只有在需要时才解锁?使用
%会有危险。)