什么是R的父框架。顺便说一下,父框架是什么意思?我猜这是定义环境而不是调用环境,因为R使用词法范围,但我不确定。感谢。
答案 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 section或Calling Environment section中阅读有关父帧的更多信息。