代码之家  ›  专栏  ›  技术社区  ›  J. Mini

R中无全局变量的作用域

  •  0
  • J. Mini  · 技术社区  · 7 年前

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Len Greski    7 年前

    <- , = <<- . 第三种形式, <<

    如果你用这个表格 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
    > 
    
    推荐文章