【问题标题】:search() doesn't show Environment of Functionsearch() 不显示函数环境
【发布时间】:2020-10-10 15:05:37
【问题描述】:

我是R 的新手,并尝试了解环境。根据that question,每个函数调用都会调用一个环境。因此,我希望search() 向我展示由新函数调用创建的新环境。确实,它没有出现在下面的演示代码中,并且应该在父环境中的变量x也没有找到。

a<-function(){ # should create a further environment
  print(search()) # does not include any "new" environment, just global and packages
  #print(x) #not working but should be in the parent environment
}

b<-function(){ #should create an environment
  x<-2
  a()
}
b()

【问题讨论】:

    标签: r


    【解决方案1】:

    您隐含地问了两个问题:为什么search() 不显示环境,以及为什么x 在函数a() 中不可见。

    第一个最简单:search() 只显示使用attach() 添加到搜索列表中的环境。还有很多其他环境。

    对于另一个问题,您可以通过调用environment() 查看当前活动的环境。您可以通过调用parent.env(environment()) 来查看它的父级,然后在空环境中沿着链一直返回到链的末端。

    如果您在调用a() 时这样做,您将看到活动环境不包含任何内容,因为该函数中没有局部变量。它的父级是全局环境,因为那是创建a() 的地方。全局环境的父级是搜索列表中的下一个条目,较早的父级通过搜索列表返回到基础环境,其父级是空环境。

    您希望b() 的环境会出现在某处,但事实并非如此。 b()a()的调用者,但与a()的定义无关。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2017-12-29
      • 2022-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      相关资源
      最近更新 更多