0

我似乎对什么构成 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 而不使用任何全局变量?我似乎要么有一个非常深刻的误解,要么对一个非常重要的想法一无所知。

4

1 回答 1

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
> 
于 2018-11-04T23:52:19.700 回答