什么是R的父框架

时间:2015-02-21 02:30:37

标签: r

什么是R的父框架。顺便说一下,父框架是什么意思?我猜这是定义环境而不是调用环境,因为R使用词法范围,但我不确定。感谢。

1 个答案:

答案 0 :(得分:15)

好的,来自?parent.frame帮助页面

  

功能评估的父框架是调用函数的环境。它的编号不一定小于当前评估的帧编号,也不是定义函数的环境。如果n为1(默认值),则sys.parent返回父帧的编号,如果n为2,则返回祖父项,依此类推

以及

  

严格地说,sys.parent和parent.frame引用父解释函数的上下文。因此,内部函数(可能会或可能不会设置上下文,因此可能会或可能不会出现在调用堆栈中)可能无法计算,S3方法也可以做出令人惊讶的事情。

所以parent.frame指的是调用函数的环境,而不是它定义的位置。

例如

parentls <- function() {
  ls(envir=parent.frame())
}

a<-function() {
    x <- 5
    parentls()
}

b <- function() {
    z <- 10
    parentls()
 }

a()
# [1] "x"
b()
# [1] "z"
parentls()
# [1] "a"        "b"        "parentls"

此处,parentls()在parent.frame中执行ls()。从a()b()开始运行时,我们只看到这些函数中的变量。当它自己调用时,它只是为您提供全局环境中的所有变量,就像您自己调用ls()一样。

您可以在Hadely的高级R的Closure sectionCalling Environment section中阅读有关父帧的更多信息。