问题标签 [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 投票
2 回答
136 浏览

r - 为什么 R 不在提供的环境父树中查找指定的对象?

配置:

我正在学习 R,目前我正在阅读 R 中的环境。我正在做一些练习,我想出了一个我自己创建的例子,但似乎我仍然无法解释和理解正确查找 R 中的对象。一般来说,到目前为止我所理解的(如果我错了,请纠正我)是,如果 R 在当前环境中找不到对象,它会按所有现有父环境的顺序调用。为了看看它在实践中是如何工作的,我创建了以下程序:

这是我通过选择 e10 作为调用者环境来运行上述程序的方法

鉴于testvar在环境e4中定义并且e4e10的祖先,我希望 R 在父树中从 e10 上升到 e4 以找到 testvar 的值。但是程序停止并出现以下错误:

你能告诉我我误解了什么吗?我使用的事实with(data = e10, ...)不应该暗示用于函数调用的环境是 e10?

0 投票
0 回答
236 浏览

r - R 的 S3 方法调度在采购包时不起作用

我目前正在开发工具的“帮助”下在 R 中开发一个包。也就是说,包load_all(path = ...)在这个阶段被加载到 R studio 中,并且我的 R 目录中的函数可用。到目前为止,一切都很好。但是当我尝试在我的包中实现一个简单的 S3 层次结构时,调度将不起作用 - 它会引发以下错误:

UseMethod(“generic_function”,obj)中的错误:没有适用于“generic_function”的适用方法应用于类“c('data.frame','myclass')”的对象

但是,当我实现相同的通用函数及其方法并将它们显式加载到当前环境中时,调度将起作用。

我无法解释这里发生了什么。当我加载包时,调度将根本不起作用,但在环境中“动态加载”时它会起作用。

我感谢您的帮助。BR

...根据要求提供代码:

0 投票
1 回答
212 浏览

r - 如何使用 renv 更新项目中使用的 R 版本

我有一个使用 R 3.6 的项目,我已将 R 升级到 4.0.2,并希望在该项目中使用 4.0.2。我想知道如何去做,或者我应该完全删除renv/并重建?

编辑

我做了以下事情:

并且2从上面选择,这似乎是合理的。

0 投票
2 回答
68 浏览

r - 将包附加到 R 中的“临时”搜索路径

在函数内部,我正在采购一个脚本:

不幸的是,我采购的脚本并没有完全在我的控制之下。他们调用library(somePackage),它污染了搜索路径。

如果作者sourceme.R期望他/她附加的包处于顶层/接近全局环境,这主要是一个问题。如果我自己附加了一些包来掩盖他/她期望可用的一些功能名称,那可不好。

有没有办法我可以获取脚本,但以某种方式制作我自己的临时搜索路径,在函数完成运行后“重置”?

0 投票
1 回答
317 浏览

javascript - 如何在 Global R 环境中加载动态数据框?

我正在使用闪亮的 Java 脚本开发决策树应用程序。

我有一个动态树的结构,用户可以在其中创建新的分支和节点,当用户完成树的构建时,他可以按下按钮并将树的结构导出到 txt 文件中。

我想知道是否有一种方法可以避免“导出到数据集”按钮,而是在 R 全局环境中加载树,就像动态数据框一样。

用于导出树的 Java 脚本函数

HTML 代码

应用程序.R

谢谢!

0 投票
1 回答
214 浏览

r - 如何在函数调用中“list2env()”(或通过管道进入“assign()”)?

我有一个用例将函数映射到向量,然后将结果分配给父环境中的各个对象——不是全局环境,而是map()调用它的环境。具体来说,这一切都发生在一个函数中,所以我想将这些对象分配给函数的环境,以便在函数调用中进行后续使用,并且只在函数调用中使用。

我知道您可以通过升序数字位置(全局为 1)或通过从当前环境倒数来指定环境,即使用rlang::caller_env(). 但是,无论哪种方法,在这种情况下,我都没有可靠的方法来指定所需的函数执行环境。正如下面的代表所示,我可以让它在一个特定的情况下工作rlang::caller_env(6),但很明显,在这种情况下,正好计数 6 帧恰好在这种情况下工作,它具有特定的管道链和操作序列,并且任何情况都可能有任何那里需要的其他值 - 通过在函数中打印回溯,我只发现 6 是正确的数字。使用map()时,是 13 什么的,可能是因为里面的所有嵌套函数调用map(). 而且我根本无法使用它list2env()

所以我正在寻找的是一些我可以提供的参数,list2env()或者assign()将清楚一致地导致分配特别发生在我正在使用它们的函数的环境中,即使我在最后调用这些函数的管道链。

reprex 包(v0.3.0)于 2020 年 10 月 27 日创建

0 投票
2 回答
71 浏览

r - 为什么在 R 中运行 library(renv) 后对象被屏蔽?

我正在遵循这些步骤,就像这里的工作流程一样

  1. renv::init()
  2. 照常工作并安装新软件包
  3. renv::snapshot()

我面临的问题是在运行时library(renv),许多函数被屏蔽了,比如加载,所以我必须在我的代码中重新屏蔽它们才能让它再次工作。像base::load(...)有没有办法避免这种掩蔽?

这里是运行时的日志library(renv)

0 投票
0 回答
22 浏览

r - 在 R 中检测其他环境中的方法——用于在 testthat 中进行测试

是否可以允许“UseMethod”查看其他环境中定义的类函数?有关示例,请参见下面的代码。我也希望检测到 h.logical 以便 h(TRUE) 返回“逻辑”。

此代码现在在最后一行引发错误: Error in UseMethod("h") : no applicable method for 'h' applied to an object of class "logical"

用这个例子解决问题就足够了。如果那不可能,我将不胜感激以另一种方式解决实际用例。

用例如下:我有一个包,上面有 h 之类的函数,然后我想给那个函数添加一个类。只需将新函数添加到 .Globalenv 即可。当我想使用 testthat 进行测试时会出现问题,因为我不允许在测试中写入 .Globalenv 。将新的类函数添加到测试中的某个其他环境使其可以被 methods() 检测到,但是,UseMethod 仍然看不到它并引发错误。有任何想法吗?

我可以使用其他的东西然后 UseMethod 来达到这个目的,或者在测试时做一些其他的黑客来模仿实际的用法吗?

非常感谢任何有关如何处理此问题的帮助或指示!

0 投票
1 回答
44 浏览

r - 在 R 函数内部,我如何访问调用环境?

我正在编写的函数需要知道其调用者的环境。可以在不将环境作为参数传递的情况下做到这一点吗?

0 投票
2 回答
47 浏览

r - 如何在 r 环境中调用多个向量以在另一个函数中使用它们

我在 R 环境中有一系列不同长度的向量,例如:

我想通过模式将它们调用到另一个函数中(rbind 他的字符串以将初始向量加入更大的向量中),如下所示:

但是当我将“样本”放入 rbind 时,它无法识别向量,如果不是使用 ls 函数获得的文本,如下所示:

我怎么能修好它?