R 环境和函数调用堆栈

2024-04-15

我正在尝试使用get在一系列函数调用中,但对象名称的查找似乎跳过了环境。例如:

foo <- 1 # variable in .GlobalEnv

getter <- function(x) {get(x)}
getter("foo") # returns 1, which is expected

f1 <- function() {
  foo <- 2 # local variable in the function scope
  getter("foo")
}

f1() # still returns 1, would've expected to return 2

为何如此呼唤f1返回foo在全球环境中,而不是在foo在调用函数的环境中?

我怎么有get查看调用函数的环境?环境pos = sys.parent()似乎不起作用。


你会被框架和环境之间的微妙差异所困扰(这甚至更加微妙,因为框架就是环境,或者环境就是框架)以及两者之间的差异词法和动态作用域 https://stackoverflow.com/questions/3840769/scoping-and-functions-in-r-2-11-1-whats-going-wrong。帮助页面中有一些详细信息parent.frame http://www.inside-r.org/r-doc/base/parent.frame以及其他遍布各种文档的地方。

尝试简化:

Your getter函数有自己的环境 http://www.inside-r.org/r-doc/base/environment存储该函数局部变量的位置(x在这种情况下)。由于 R 是词法作用域,这意味着函数环境有一个父环境,该父环境由定义函数的位置定义,在这种情况下是全局环境(如果它是在另一个函数内部定义的,那么父环境将是该函数的 env)功能)。

你打电话时f1它调用getter然后 getter 尝试查找变量foo,它首先在自己的环境中查找,没有找到它,然后在其父环境(即全局环境)中查找并找到foo值为 1。

您的思维遵循动态范围界定,框架近似于此。什么时候f1被称为它有自己的环境(在其中foo将被分配值2),然后它调用getter功能。的环境foo不是 的父级getter的 env (词法作用域),但是环境f1是的父框架getter since getter被叫自f1,所以看看环境f1你需要告诉get函数查看父框架而不是父环境。

总而言之,父环境是定义函数的环境(词法作用域),父框架是调用函数的框架/环境(模拟动态作用域)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 环境和函数调用堆栈 的相关文章

  • 订购“混合”向量(带有字母的数字)

    我怎样才能订购像这样的矢量 c 7 10a 10b 10c 8 9 11c 11b 11a 12 gt alph in alph 1 7 8 9 10a 10b 10c 11a 11b 11c 12 并用它对 data frame 进行排序
  • 具有可变字体系列的 geom_text 图例

    我想要geom text 标签根据变量采用字体系列 按照上面的例子ggplot2 文档 http docs ggplot2 org current geom text html 向下滚动到底部 我已经这样做了 与 ggplot 文档示例相同
  • R 中的县等值区域地图的阿拉斯加和夏威夷格式不正确

    我正在尝试将美国的 Choropleth 地图格式化为特定颜色 不幸的是 当使用scale fill brewer改变颜色 只有 48 个州这样做 夏威夷和阿拉斯加没有 是否可以知道我是否也可以将着色应用到夏威夷和阿拉斯加 library
  • 将鼠标悬停在 R 中的传单时弹出?

    我的传单地图看起来像这样 library sp library leaflet circleFun lt function center c 0 0 diameter 1 npoints 100 r diameter 2 tt lt seq
  • r-base 和 r-推荐包之间的区别

    谁能告诉我基本包和推荐包之间有什么区别 如果有提到基本包和推荐包的链接 请提供链接 差异实际上来自 R Core 和 R 代码的组织方式 例如在上游 SVN 存储库中 In src library 您拥有所有 基本 包 base 编译器 数
  • R中特定小时和月份的数据框中的平均值

    我一直在网上搜索 但还没有找到解决这个可能很简单的问题的方法 这是使用库 xts 的半小时数据 library xts data xts lt as xts 1 nrow data as POSIXct 2007 08 24 17 30 0
  • 根据其他列设置列的值

    我有一个数据框 如下所示 ID Score New ID New Score 123 5 456 456 1 789 789 0 123 我想为 New ID 列提供相同的分数 只是顺序不同 期望的结果 ID Score New ID Ne
  • 如何使用 R 中的 ggplot 在单独的字段中绘制日期和时间

    我有以下数据框 head d c 1 2 7 10 date hour total sess 2 2014 04 06 00 115 3 2014 04 07 01 3 4 2014 04 07 16 3 5 2014 04 07 21 1
  • 使用 pmap 迭代 tibble 的行

    我有一个非常简单的 tibble 我想迭代它的行以应用函数pmap功能 我想我可能误解了一些观点pmap函数 但我大多很难选择参数 所以 我想知道我是否应该使用rowwise在这种情况下函数pmap或不 不过我还没见过案例 另一个问题是使用
  • 连接字符串列中的唯一字符

    我有一个 data frame 其中有一个字符串列 city 它由用 分隔的连接字母组成 dt data frame id letters 1 6 city c A B B D A D G A C F G C D dt id city 1
  • 在 R 中的轴标签中绘制表情符号/自定义图像

    我正在尝试在 R 中绘制表情符号和自定义图像作为 X 轴的标签 我读过类似的帖子并且问题 https stackoverflow com questions 47730589 plot emojis emoticons in r with
  • ggplot2 每个方面的不同因子顺序

    我正在尝试创建一个克利夫兰点图 在本例中为 J 和 K 给出两个类别 问题是元素 A B C 都在这两个类别中 所以 R 一直放屁 我做了一个简单的例子 x lt c LETTERS 1 10 LETTERS 1 3 LETTERS 11
  • 在 R 中从一条线偏移绘制一条平行线

    我有代表沿着一些街道行驶的线串 但我实际上想代表骑自行车者的旅程 它偏离线路 即他们在路边附近行驶 我正在努力思考如何去做 我制作了一段可重现的 R 代码来进行说明 Let s say I have a route along some s
  • R:计算数据框的边距或行和列总和

    我有一个如下所示的数据框 Flag1 Flag2 Type1 Type2 Type3 1 A FIRST 2 0 0 2 A SECOND 1 9 0 3 A THIRD 3 7 0 4 A FOURTH 9 18 0 5 A FIFTH
  • dplyr 中的 if_all 和 if_any 函数未运行

    我正在尝试使用以下方法复制这些示例if all and if any功能但不工作 Erro Problem with filter input 1 x n o foi poss vel encontrar a fun o if all i
  • 有没有办法“source()”并在错误后继续?

    我有一个大型 R 脚本 其中包含 142 个小部分 如果某一部分因错误而失败 我希望脚本继续而不是停止 这些部分不一定相互依赖 但有些部分确实相互依赖 如果中间的一个失败了也没关系 我不想在这个脚本中加入try 来电 而且我不想将文件分成许
  • 如何在Java程序中检索环境变量的修改值(外部修改的)?

    是否可以在 Java 程序中检索环境变量的修改值 我尝试使用System getenv 但新的值并没有体现在程序中 场景是这样的 该程序检索环境变量的值 当程序仍在运行时 该变量的值可以从外部更改 甚至可以是手动过程 例如在 Windows
  • 使用 rollend 滚动 data.table

    我无法获取roll Inf定义时工作rollends FALSE When rollends未设置或设置为TRUE 我看到了预期的结果 我将不胜感激任何建议 library data table dt1 data table Date se
  • 在ggplot2中按线连接分组点

    我试图将每组的每个蓝点与其相应的红点连接起来 但是 我在使用时遇到问题geom segment 谢谢帮助 repl lt data frame title c A B C A B C diff c 10 06 1 89 12 79 10 0
  • 如何在R中制作渐变颜色填充时间序列图

    How to 填充区域 sp 线下方和上方渐变色 这个例子是在 Inkscape 中绘制的 但我需要垂直渐变 不是水平的 间隔从zero to positive 来自white to red 间隔从zero to negative 来自wh

随机推荐