问题标签 [r-environment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
23 浏览

r - 覆盖通过 devtools 加载的包中的函数

我可以通过加载一个包pkg <- devtools::load_all()并通过pkg$env$fun_b. 假设我有fun_a电话fun_b

目标:我想用 覆盖fun_bfun_b2这样当我调用fun_a它时会调用fun_b2.

不工作:我试过pkg$env$fun_b <- fun_b2无济于事。fun_a()仍然打电话fun_b()

0 投票
4 回答
177 浏览

r - 从 .GlobalEnv 中分离脚本:源脚本的源脚本

这个问题类似于Source script to separate environment in R, not the global environment,但有一个关键的转折。

考虑一个获取另一个脚本的脚本:

我想获取脚本main.R并将所有内容保存在“本地”环境中,例如env <- new.env()。通常,人们可以调用source("main.R", local = env)并期望一切都在env环境中。但是,这里不是这样:x是 的一部分env,但函数hello不是!它在.GlobalEnv.

问题:我如何将脚本提供给 R 中的单独环境,即使该脚本本身提供其他脚本,并且不修改其他正在提供的脚本?

感谢您的帮助,如果我能澄清任何事情,请告诉我。

编辑 1:更新的问题明确指出不能修改作为源的脚本(假设它们不受您的控制)。

0 投票
4 回答
68 浏览

r - 如何在环境中运行任意表达式,将所有结果存储在环境中?

在 R 中,运行表达式会在全局环境中x <- 1定义一个值为 的变量。在函数中执行相同操作会在函数的环境中定义变量。x1

使用rlang::with_env,我们也可以对任意环境做同样的事情:

reprex 包于 2021-10-26 创建(v2.0.1)

但是,我不知道如何在函数中做同样的事情。也就是说,一个函数接收表达式,然后在空白环境中运行它们,返回环境:

也就是说,函数被赋予了y <- 2应该在新环境中运行的表达式。出于演示目的,该函数还在x <- 1环境中进行了内部设置。

无论我尝试过什么,环境都只是用创建的e$x,从不定义e$y <- 2(注释掉的代码是其他失败的尝试)。

我相信这是可以做到的,而且我只是错过了一些东西。那么,有人可以帮帮我吗?

0 投票
2 回答
46 浏览

r - 设置不同于全局环境的脚本环境

我在 R 中有许多松散相关的数据分析脚本。其中一些脚本的代码可以从全局环境中删除所有变量,以便在运行后擦除敏感信息。其他脚本的变量名称与其他脚本中的相同,因此会覆盖关键变量。

我希望能够将整个脚本/R 文件设置到一个单独的环境中,这样它的变量和函数就不会直接存储在全局环境中。我知道如果通过 source() 函数从另一个脚本调用脚本,则可以做到这一点;但是,有没有办法在脚本本身内创建一个环境并让整个脚本(数千行)将其所有变量和函数保存到该环境而不是全局环境中?

0 投票
0 回答
23 浏览

r - 如何在 R 中的多脚本项目中测试每个可能的假设组合

我很难弄清楚如何实际实施一个具有大量脚本的项目(需要以特定顺序执行,因为一个脚本的输出成为另一个脚本的输入),每个脚本都有许多假设。

最初该项目打算有许多脚本,但是假设所有假设都是用特定数字硬编码的;换句话说,最初只考虑了一种情况。

当我开始实验时,我首先调整了某些假设,并且在脚本中调整了假设,该脚本生成了一个将由后续脚本使用的数据文件,我只是更改了该文件的名称(在创建文件的脚本和使用该文件的脚本)。

没过多久我就意识到这个过程不是最理想的,特别是如果我想测试各种各样的场景(即,跨各种脚本的不同假设组合)。

理想情况下,我想做的是创建一个 R 文件(一个“假设”文件),其中包含每个假设的可能性列表。每个假设都可以有任意数量的可能性。我希望能够在整个脚本系列中运行可能假设的每种组合,其输出清楚地识别选择的每个假设和最终输出。

为了更好地说明,请考虑下面的玩具示例:

假设脚本 (assumptions.R)

脚本 1 (sample_script_1.R)

脚本 2 (sample_script_2.R)

启动脚本

按照目前的结构,如果我运行启动脚本,只会打印出一个值(即,一次只运行一个场景)。我如何重构上面的代码,以便在执行启动脚本时,它可以获得假设脚本中每个假设组合的输出(在本例中为 12 种不同的组合)。我知道该expand.grid()函数会为每个可能的组合创建一个数据框,但是我怎样才能将这些组合中的每一个注入两个脚本的相关部分。

注意:仅出于实际情况,实际用例是一个投资分配模型,它有一个分配模型和一个投资组合模型。这些模型的脚本需要分开保存,因为它们的功能非常不同。分配模型包含与资产分配策略(例如动量类型等)严格相关的各种假设,而投资组合模型获取分配模型的输出(分配)并做出投资决策。投资组合模型也有各种假设(例如,杠杆等)。与上面的玩具示例一样,目标是拥有一个主假设脚本,指定所有可能的假设,然后为每个组合运行整个多脚本项目。

我被困住了,所以任何和所有的帮助都将不胜感激!

0 投票
4 回答
129 浏览

r - 是否可以让 `dput` 返回在封闭环境之外运行的源代码?

假设我有一个闭包add_y(y),它返回一个添加y到其输入的函数。

所以 的值add_4是一个将 4 添加到其输入的函数。这行得通。我想dput用来显示 as 的add_4定义

但这不是 dput 返回的。

有没有办法获得可以在封闭环境之外运行的源代码?

0 投票
1 回答
25 浏览

r - rlang 的 env_get 中的继承似乎没有在祖父母环境中看到绑定

在以下示例中,我尝试使用env_get. 第一位按预期工作。

reprex 包于 2021-12-28 创建(v2.0.1)

我希望第二位,调用execwithg.env=e1起作用,因为调用env_gethas inherit=TRUE。我的理解是它会在 中caller_env查找,什么也没有,然后在其父项中查找"a",但这不起作用。进一步让我感到困惑的是,当我明确指示env_get向上查找 2 个级别时,这确实有效。

我对这种继承应该如何工作有误解吗?

0 投票
4 回答
69 浏览

r - 是否可以将变量从全局环境移动到单独的环境中?

是否可以将驻留在全局环境中的变量移动到单独的环境中以整理全局命名空间?我了解如何在单独的环境中创建变量with(env, ...)(我想可以将它们复制到一个单独的环境中,然后将它们从全局环境中删除,但想知道是否有更有效的方式。