'<<-'运算符不能定义变量吗?

BadFrameRate

在下面的函数中,我以某个地方为例,m首先使用常规赋值运算符将变量定义为NULL <-

稍后,在函数中set()使用第5行中的新赋值运算符将其m初始化。这将导致它成为具有value的全局变量NULL<<-mNULL

我不明白为什么我们必须在第2行中也首先使用常规的赋值运算符对其进行定义。

makeVector <- function(x = numeric()) {
        m <- NULL
        set <- function(y) {
                x <<- y
                m <<- NULL
        }
        get <- function() x
        setmean <- function(mean) m <<- mean
        getmean <- function() m
        list(set = set, get = get,
             setmean = setmean,
             getmean = getmean)
}
G.格洛腾迪克

如果不定义m,它将在全局环境而不是函数中创建。?"<<-"

运算符“ <<-”和“->>”通常仅在函数中使用,并导致在父环境中搜索要分配的变量的现有定义。如果找到了这样的变量(并且其绑定未锁定),那么将重新定义其值,否则将在全局环境中进行赋值。请注意,它们的语义与S语言中的语义不同,但是与R的作用域规则结合使用时会很有用。有关更多详细信息和示例,请参见“ R语言定义”手册。

这是一个小的示例,首先说明了min的预定义,f因此in中g定义的in变量f写入时in被更改,而in中的变量未在任何地方预定义,因此将其设置在全局环境中。mmff2m

# Case 1. m is predefined in f

if (exists("m")) rm(m)
f <- function() {
   m <- 0
   g <- function() m <<- 1
   g()
   m
}
f()
## [1] 1
exists("m")
## [1] FALSE

# Case 2. m is not predefined

f2 <- function() {
   g <- function() m <<- 1
   g()
   m
}
f2()
## [1] 1
m # m defined in global environment
## [1] 1

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

逗号运算符定义变量

来自分类Dev

我不能在分配给变量的集合上使用包含运算符吗?

来自分类Dev

是“ :::”运算符吗?

来自分类Dev

空条件运算符不能用于分配吗?

来自分类Dev

GCC不能使用未定义的运算符=

来自分类Dev

GCC不能使用未定义的运算符=

来自分类Dev

定义多个变量并与OR运算符进行比较

来自分类Dev

运算符&在haskell吗?

来自分类Dev

类运算符“ =”的定义

来自分类Dev

C ++ ::运算符定义

来自分类Dev

位运算符比+和-运算符快吗

来自分类Dev

我不能在fstream()的参数中使用运算符“” sv吗?

来自分类Dev

SFINAE不能防止模棱两可的运算符重载吗?

来自分类Dev

虽然运算符重载不能通过引用返回吗?

来自分类Dev

是'->'运算符吗?它返回什么?

来自分类Dev

Elm支持美元运算符($)吗?

来自分类Dev

在Python中使用<>。是<>运算符吗?

来自分类Dev

Haskell($)是魔术运算符吗?

来自分类Dev

coffeescript的`?.`运算符是monad吗?

来自分类Dev

C ++双向运算符,可能吗?

来自分类Dev

Dart有逗号运算符吗?

来自分类Dev

运算符是语句的子集吗?

来自分类Dev

JavaScript &&运算符-澄清吗?

来自分类Dev

哈斯克尔:!变量运算符

来自分类Dev

在变量中分配运算符功能

来自分类Dev

Javascript:|| 变量赋值运算符

来自分类Dev

AMPL总和变量运算符

来自分类Dev

使用变量作为运算符-Powershell

来自分类Dev

创建变量之间的运算符置换