对于R中的优良作法,我似乎深感困惑。假设我有以下R代码:
f<-function()
{
g<-function(s)
{
b<-b+1
s<-s+5
}
b<-10
g(2)
return(b)
}
在任何一种典型的语言中,这将始终返回b = 10,据我所知,使f识别g正在修改b的典型方法是使用全局变量。但是,据我所知,R尽可能避免使用全局变量似乎是一种惯例。这使我问,我应该如何修改f以便在不使用全局变量的情况下输出b = 11?我似乎有一个非常深刻的误解,或者是对一个非常重要的想法一无所知。
答案 0 :(得分:0)
R中的赋值运算符有三种形式:<-
,=
和<<-
。第三种格式<<-
将值分配给当前环境的父级中的对象。
如果您在g()
函数中使用此表单,它将使b
函数中f()
的值增加1。
f<-function()
{
g<-function(s)
{
# use <<- form instead of <-
b<<-b+1
s<-s+5
}
b<-10
g(2)
return(b)
}
...以及输出:
> f<-function()
+ {
+ g<-function(s)
+ {
+ b<<-b+1
+ s<-s+5
+ }
+ b<-10
+ g(2)
+ return(b)
+ }
> f()
[1] 11
>