【问题标题】:Assignment of variables within function函数内变量的赋值
【发布时间】:2018-07-08 01:25:02
【问题描述】:

我最近在 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)

我不明白的是,在print.func 内,所有的赋值都应该限制在本地函数环境中,但在这种情况下,a 是在全局环境中赋值的。

只有当我们执行print.func(a &lt;&lt;- 1:10) 之类的操作时,我才会期待这种行为。

任何想法为什么会发生这种情况?

【问题讨论】:

  • a &lt;- print.func(1:10)
  • 赋值不在本地环境中,而是在函数调用之前,在全局环境中完成
  • @Cath 如果您有一些文档/材料来支持它,那将是一个很好的答案。至于为什么他的电话仍然打印数字,a &lt;- 1:10 本身返回向量 1:10。

标签: r variable-assignment


【解决方案1】:

这是记录在案的行为。

查看 R 语言定义Section 4.3.3

另外值得注意的是foo(x &lt;- y)如果参数的效果 被评估是改变调用环境中x的值 并且不在foo的评估环境中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-14
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    相关资源
    最近更新 更多