问题标签 [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 回答
213 浏览

r - 一起使用 R6 类和 foreach() %dopar% 的问题

当与 foreach() 一起使用时,我在 R6 类上遇到问题,可能与环境有关(我使用的是 Windows)。

假设有两个 R6 类,“class1”和“class2”。class1 中的 method1 依赖于 class2(例如,请参见下面的示例代码)。问题是,如果我foreach() %dopar%在 class1 上使用,R 似乎无法识别 class2,即使我在语句中.export = c("class1", "class2")明确设置。foreach()(这里 class1 使用 class2)但是,如果我foreach()在 class2 上使用,它可以正常工作……(这里我只是在里面使用 class2 foreach()

所以问题似乎是,如果 class2 “嵌套”在 class1 中,那么 class2 将无法与foreach(). 我觉得这与环境有关,但无法弄清楚如何。我什至试过.export = ls(.GlobalEnv)了,但还是不行……</p>

我可以通过从 class2 实例化一个对象并将其用作方法 1 中的额外参数来解决此问题,例如method1 = function(input = 1:3, objectFromClass2)在定义 class1 时,但从长远来看它可能不是最佳解决方案 - 特别是考虑到代码可维护性和易于调试作为优先事项(这就是我使用 R6 的 OO 功能的原因)。

提前谢谢了!

这是一个代码示例:

0 投票
1 回答
296 浏览

r - R中R6类的算术运算符重载

我正在研究一个自定义R6Class,它将成为我的 R 包的主要结构。但问题在于:

或者

不工作,因为当我跑步时

我收到以下错误Error in a + a : non-numeric argument to binary operator

我让它工作的唯一方法就是这样

但这没有用,因为在library(MyClass)空环境+.MyClass中从头开始加载包时 ( ) 未定义。

那么,如何以正确的方式重载 R6 类的运算符呢?

以防万一,片段

0 投票
2 回答
2081 浏览

r - 使用 Roxygen2 记录 R6 类方法

我正在编写一个包含多个方法的 R6 类的包。我希望能够为类和方法生成文档。对于下面的示例,我希望能够使用?Person类和?set_hair方法访问文档。这是我的示例类:

运行roxygenise()时,方法体上方的注释根本不会呈现,所以我指定的唯一信息@section Methods是在文档中。

由于我有超过 50 个类方法,如果我可以单独访问方法文档会更好?methodname。我发现了一些关于此的帖子(在 RStudio 的 R 包中记录 R6 类和方法https://github.com/klutometis/roxygen/issues/306),但在我看来,这不支持 R6 类。

分别记录我的类方法的最佳方法是什么?

0 投票
1 回答
229 浏览

r - 强制在 R6 类中进行修改(在 R 中)

所以我正在使用 R6(我的老板偏好)在 R 中编写一个程序。它必须做一些繁重的数字运算,所以我试图让 R6 类中的关键变量就地修改。不幸的是,在普通 R 中使变量修改到位的方法似乎在 R6 类中不起作用。我在下面构建了一个最小的示例。您可以清楚地看到 R6 类内部的变量,该变量在函数之后跳转到新的内存地址。在 R6 类之外,做完全相同的事情不会导致复制。任何人都可以就我为什么以及如何让类中的变量修改到位给我任何建议吗?

0 投票
0 回答
65 浏览

r - 如何完全克隆 R6Class 生成器

我正在开发一个 R 包并在内部使用 R6。我有两个 R6 对象:

  1. Foo包含大量数据的对象和汇总整个数据的方法;
  2. 一个Bar对象,其中包含Foo的数据的子集方法和查询特定子集数据的方法。

我想要做的是创建Bar R6Class Generator对象的克隆并传递一个包含Foo对象所有数据的环境。我找不到完成克隆R6Class Generator.

注意:我不想直接拆分数据Foo并将数据传递给Bar$new,这将大大减慢整个过程,因为Bar将创建大量对象而不是唯一需要的对象。

下面是一个简单的例子:

这将停止,因为private$m_x未定义

Foo对象初始化后,

这会起作用

但原来的BarR6Class 生成器也已更改

似乎private$create_bar_gen()无法完成复制 R6Class Generator。my_bar$set将同时设置原始和新的。

0 投票
1 回答
145 浏览

r - 加载 R6 对象的问题 - R 中断

我有一个复杂的 R6 对象,当我保存并再次加载它时,它会给我带来 R 问题。如果我使用 saveRDS 保存它并使用 readRDS 将其加载到另一个 R 会话中,R 开始将随机内容打印到控制台。例如,加载后,我得到类似这样的东西试图退出 R:

很明显,负载完全搞砸了 R。更简单的 R6 对象工作正常,但是我仍然没有成功找到我的对象的哪个部分导致了这种情况。以前有没有其他人见过这种行为?

0 投票
1 回答
215 浏览

r - R - R6 class as a rigid "read-only" data structure

In large projects I sometime want to have a standardized and rigid data 'object' such that any function of that data may confidently assume numerous properties of the object with no more than an assertion that the object is of the expected class. So I'm very happy to have discovered R6 classes, which seem to allow this by providing 'private' elements as follows:

This get function is a hack. What I really want is for the attributes of data to be accessible simply as data$x or data[['x']] while still having the tamper-proof qualities of private variables. Is there a better way to achieve this?

0 投票
2 回答
132 浏览

r - R6——为什么在使用打印功能时主动绑定会打印两倍的内容?

我正在 R6 类中创建一个活动绑定来打印一个私有元素。

当我打电话print(private$privMail)时,结果会打印两次,但只在私有元素上,而不是在公共元素上。

如果我不使用print,没问题。

这是一个代表:

编辑

准确地说,我的问题不是关于如何解决这个问题(我可以通过删除打印来解决,就像在第二堂课中所做的那样),而是关于为什么使用 print() 打印两次内容。

0 投票
0 回答
169 浏览

r - R6 类设置中具有多个输出的 R 并行处理

我想并行运行一些有效地具有两个输出的功能。我完全知道 R 函数一次只能返回一个变量。我的问题设置在 R6 类中,我使用 parLapply 调用 R6 类方法运行并行循环,这些方法更改类实例中的变量并将值返回给 parLapply。但是,对类实例变量所做的任何更改都不是持久的,因为并行循环正在处理我的实例的副本。

我知道实例是跨叉复制的,它们不能写入同一个实例变量(回归参数),因此实例变量根本不会改变。

我的实例变量实际上应该类似于 parLapply 返回的列表。

在 parLapply 中返回一个包含两个输出变量的列表,然后合并各个项目并将其分配给 model$regressionparameter 并不是真正的解决方案,因为我的装配工可以使用的模型类的类型可能会有所不同,并且可能有任意数量的输出并且可以包含具有自己的回归参数的类似类。

0 投票
2 回答
270 浏览

r - 在 R6 类上定义方括号 (`[`) 运算符

这是不起作用的:

具体来说,该[方法是垃圾:

期望的结果是,除了它的矩阵更小之外,这foo[1:2,]将是一个类的对象Foo。有没有直接的方法来实现这一点,将操作员直接暴露给用户?foofoo$X[