访问R中的模块变量

时间:2014-03-21 03:52:19

标签: r variables module

您能解释一下模块中的变量吗?

我定义了一个这样的模块:

    CMod <- function(){

        fld = 1:3
        getField <- function(){ fld }

        change <- function( ){
            fld <<- 10:13
            print( fld )
        }

        return (
            list( field=fld, change=change, getField=getField )
        )

    }

但变量“fld”通过访问例程显示不同的值。

> myMod <- CMod()

> myMod$field
    [1] 1 2 3

> myMod$change( )
    [1] 10 11 12 13
> myMod$field
    [1] 1 2 3
> myMod$getField()
    [1] 10 11 12 13

当fld读取时通过getField()函数, 它显示“10 11 12 13”。 但是当它直接读取时,它会显示“1 2 3”。

有什么区别?

1 个答案:

答案 0 :(得分:1)

来自?'<<-'

&#34;运算符&lt;&lt; - 和 - &gt;&gt;导致通过环境进行搜索 对于要分配的变量的现有定义。如果有这样的变数 找到(并且其绑定未锁定)然后重新定义其值,否则 任务发生在全球环境中。&#34;

您的change功能包含<<-,在整个功能环境中重新定义fld

change <- function( ){
            fld <<- 10:13  ## 'fld' redefined
            print( fld )
        } 

如果您使用<-,则会看到差异。

> CMod <- function(){

      fld = 1:3
      getField <- function(){ fld }

      change <- function( ){
          fld <- 10:13
          print( fld )
      }

      return (
          list( field=fld, getField = getField, change=change)
      )

  }
> myMod <- CMod()
> myMod$field
## [1] 1 2 3
> myMod$change( )
## [1] 10 11 12 13
> myMod$field
## [1] 1 2 3
> myMod$getField()
## [1] 1 2 3