函数内的变量赋值

RJ-*_*RJ- 2 r variable-assignment

我最近在R语言中找到了一个怪癖,我不确定这是故意还是错误.

以下是一个例子:

# Simple print function
print.func <- function(n) {print(n)}

# Test it out
print.func(1:10)
[1]  1  2  3  4  5  6  7  8  9 10

# However, if we wrap an assignment into the function
print.func(a <- 1:10)
Run Code Online (Sandbox Code Playgroud)

我不明白的是,在print.func所有分配中,所有分配都应该局限于本地功能环境,但在这种情况下,a在全局环境中分配.

只有当我们做类似的事情时,我才会期待这种行为print.func(a <<- 1:10).

任何想法为什么会这样?

Rol*_*and 6

这是记录在案的行为.

请参阅R语言定义第4.3.3节:

值得注意的是,foo(x <- y)如果评估参数的效果是改变x调用环境中的值而不是评估环境中的值foo.

在您的示例中,调用环境是全局环境.