问题标签 [r6]

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 回答
40 浏览

r - 删除 `global.R` 变量时的清理

问题

从文档中可以清楚地看出,变量server.R的生命周期与global.R.

对于 中的清理操作server,有session$onSessionEnded回调函数。可以在此处找到使用此功能的示例。

global.R脚本有类似的东西吗?

语境

R6在我的设置中,我在需要清理的全局范围内有两个具有引用语义(类的实例)的变量。清理操作取决于这两个对象。一些伪代码。

A并且B都在server.R.


当前的解决方法

由于classAclassB都是R6类,因此我可以访问该finalize方法(在术语中是析构函数C++)。因此,以下解决方法是可能的。

由于范围界定,这要求我已经使用回调。


如果有人知道解决此问题的“正确”方法,我会非常感兴趣。

0 投票
1 回答
619 浏览

r - 在 R 包中包含 R6 类对象

我目前正在开发一个 R 包,我想包含一个 class 对象R6,它基本上是一个环境,以便用户可以轻松使用它(与包中的数据集一起使用的方式相同)。

我有一个R6ClassConstructor网格世界:

然后我可以使用 来创建一个新实例grid = Gridworld$new(),它会生成一个 R6 类。然后我想将此对象保存grid在包中,以便用户只需输入grid.

我尝试在文件夹中另存grid.RData对象,并在/data文件夹中记录 R6 类/R

但这会导致错误devtools::document:文件'grid.RData'有幻数'X'

如何R6在包中包含此类对象?

0 投票
2 回答
958 浏览

r - 使用 R6,我如何找到从某个超类继承的类和对象?

假设我有:

A. 我可以做类似的事情吗

(我认为这与R, R6, Get Full Class Name from R6Generator Object,但包括它是全面的)

B. 我可以做类似的事情吗

C. 我可以做类似的事情吗

0 投票
1 回答
2180 浏览

r - 使用 .onLoad() 将对象加载到 R 包中的全局环境中

我正在开发一个 R 包,我需要在其中管理各种对象的状态。从概念上讲,当包加载 (.onLoad) 时,它会检查缓存中的状态对象,如果不存在,则会创建一个新实例,将其保存到缓存中,并在全局环境中分配。在使用 devtools :: build() 构建站点后,我无法使用 .onLoad() 在全局环境中看到该对象。所以,我有三个问题:

  1. .onLoad() 函数是否适合此功能?如果是这样,使状态变量在全局环境中可见的当前最佳实践是什么?
  2. 是否已经开发了跨“R 会话”管理状态的解决方案(包)?
  3. 有没有比我采用的更好的概念方法来解决这个问题?

尝试过的解决方案......到目前为止

我搜索了 SE,阅读(并重新阅读)Hadley 关于 R 包的书籍,以及 Advanced R,沉思于 Winston Chang 在 R6 上的小插曲(链接在帖子底部),我将我的实验提炼为三种失败的方法。首先,这是一个简单的“GameClass”,它用三个变量来实例化一个游戏,玩家 1、玩家 2 和(游戏的)状态。

方法一

方法二:

创建一个新环境并返回它

方法3:

会话信息

我是 OOP 的新手,R6 的新手,这是我的第一个 R 包,我已经使用 R 大约一年了。显然,我可以从这里的一些见解中受益。

提前致谢。

0 投票
2 回答
177 浏览

r - 是否可以更改 R6 函数的值?(好的风格的 OOP 编程?)

我来自 C++ 背景,试图将它用于 R6 包的 R OOP 编程。
编写大型 OOP 代码时,请考虑以下典型情况。- 你有一个类,其中有几个(可能很多)函数,每个函数也可能非常复杂并且有很多行代码:

自然,您不想将所有冗长的各种函数放在同一个 ( CTest.R) 文件中 - 它会变得混乱且难以管理。
如果您使用 C++ 编程,编写此类代码的常规方法是:首先,在.h文件中声明函数,然后为每个复杂函数创建.c文件,在其中定义函数。这使得协作代码编写成为可能,包括有效的源代码控制。

所以,我尝试在 R 中做类似的事情,比如:首先,在上面的代码中声明一个函数,然后,稍后尝试将“实际的长而复杂”的代码分配给它(稍后我会放入单独的文件CTest-Do1.R):

现在我测试它是否有效:

不,它没有。- 从上面的输出中可以看出,函数没有改变。

有什么建议吗?

0 投票
1 回答
3833 浏览

r - 采购 R6 类时如何解释错误“元素.....必须命名”?

chernan 的示例 REST 查询中提取的代码片段用于定义 R6 类的一个私有方法、两个公共属性和一个构造函数:

现在我获取包含文件并得到一个奇怪的错误。

这看起来应该意味着我试图做一些类似“self$[我没有在公共或私人中声明的东西] <- new value”之类的东西,但似乎没有这样的错误。这里发生了什么?

0 投票
1 回答
202 浏览

r - 在不知道变量名的情况下访问 R6 类变量?

这是一个简单的代码,它说明了我想要实现的目标:

它不起作用。错误信息:

为了比较,lists/data.frames 的类似任务有效:

你能帮我吗?

0 投票
2 回答
3065 浏览

r - 在 RStudio 的 R 包中记录 R6 类和方法

我正在为 R6 类及其方法的文档而苦苦挣扎。我的目标是在 RStudio 中自动完成这些方法。目前,我只得到方法的名称,但没有我通常使用roxygen2记录带有参数的函数等获得的帮助信息。

目前,这是我的课:

如果你有兴趣测试这个类,这里​​有一个可重现的小例子:

我不知道如何记录参数,因为参数实际上属于创建者而不属于类。函数中其他方法的参数呢?
用它的方法记录一个类的首选方法是什么?

我很想从 RStudio 获得“正常”功能,比如F1直接进入帮助页面。

通过搜索互联网,我已经在 Github 上看到了一些关于这个话题的报道,但它们已经有一年多的历史了。

更新

多亏了我的回答,mikeck我现在有了一个很好的类文档及其方法。但是我仍然缺乏的是获得函数/方法的提示及其参数的可能性,就像这个屏幕截图中的一个通用函数:

rStudio 函数帮助

我想知道我是否可以以某种方式手动注册我的函数,但由于它没有特定的名称(它总是与您用于对象的变量 objectname 耦合OBJECTNAME$methodeCall())我不知道该怎么做。

0 投票
0 回答
272 浏览

r - R6 继承和虚拟类问题

(第一次发布到 Stack Overflow,所以也许我没有在哪里/如何发布,抱歉)

TL;DR:我如何在 R6 中制定这个特定的继承方案:

S4 也可以使用相同的方案,我做到了,实际上我正在尝试将我的 S4 类转换为引用 R6 类。但是关于 R6 类的文档并没有那么大,我找不到如何去做。

如果这不可能,我将不得不复制大量代码,即来自“Son”的所有方法,我不想这样做。

我把最后两个班级乱伦开玩笑说成是开玩笑,但我是认真的:我这里没有钻石问题,女儿和儿子提供的方法根本不一样。

如果您考虑可以替代该方案的其他方案,我很想听听:MOTHER 和 Son 课程是虚拟的(这在 R6 中实际上是不可行的,对吧?但我不在乎),所以也许我不认为应该是继承问题。

感谢您的帮助。

** 编辑 : **

好的,我找到了解决方案。既然乱伦是全功能的儿子和女儿(因为他们是儿子和女儿),什么时候不只是重新构建它们的多重继承机制?那是 :

1° 对于 Son 没有且需要继承的每个函数,在 Son 中构建一个同名的包装器方法,在其中调用通用 coercice() 方法。

2° coercise 方法只是做 R6 应该做的:它初始化一个“Son”元素和一个“Daughter”元素,并检查它们是否是我们作为参数传递的方法是否存在。如果它只适用于一个人,让我们去吧,他们用现在是儿子或女儿的强迫乱伦来称呼它。如果两者都实施它,它会对我大喊大叫(但它可以做其他事情!)

它非常丑陋,但它可以工作并且可以做我想做的事情。

实际上,它并没有那么难看,它只是实现了应该是的东西。你认为这可以做得更好吗?

0 投票
1 回答
320 浏览

r - 如何通过字符向量查找 R6 对象属性

我有以下课程,开头如下:

我有另一堂课,开头如下:

在实践中,metaSeries$seriesList 将被初始化为 dataSeries 类型的列表。dataSeries$findMetaFeatures 必须能够调用 dataSeries$seriesList[[i]]$feature,其中 feature 位于 {clusterGIDs,clusterKGs,clusterKPs,clusterKOs} 中。默认情况下 findMetaFeatures 使用 feature="clusterKPs" 调用。在 metaSeries$findMetaFeatures 中,当检查位于 self$seriesList 中的一些 dataSeries 类型的对象时,我需要一种方法来匹配字符串“clusterKPs”与具有该名称的属性。