问题标签 [reference-class]
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.
r - 如何告诉 R 引用类对象更新其方法定义?
我正在寻找一种方法来告诉引用类的实例忘记它的一个方法定义。例如,我创建了一个类MyReferenceClass
和一个名为的实例,my_object
我可以调用该方法print_hello
并且一切正常:
如果我通过添加新方法 ( print_goodbye
) 来更新类定义,我现有的对象将能够使用它。但是,如果我更改之前定义的方法 ( print_hello
),它不会更新:
有没有办法告诉my_object
忘记它的定义print_hello
?这不起作用:my_object$print_hello <<- NULL
r - `ReferenceClass`的`[.`方法
我想[.
为我的ReferenceClass
. 到目前为止,我有这样的事情:
...但是当我最终调用S[Index>3]
. 如何解决上述问题以获得预期的结果?
r - 为什么 R 在使用引用类对象的属性时反复无常?
我在实现访问附加到引用类对象的属性的一致行为时遇到了一些麻烦。例如,
R 控制台愉快地打印NULL
。但是,如果我们尝试另一种方法,
现在我们1
有如预期的那样。请注意,<<-
运算符是必需的,可能是因为分配给与.self
分配给引用类字段具有相同的限制。请注意,如果我们试图在构造函数之外进行分配,比如说
我们会被打耳光
事实上,文档?setRefClass
解释说
整个对象可以通过保留名称在方法中引用
.self
......这些字段是只读的(修改这些引用没有意义),但有一个例外。原则上,.self
可以在$initialize
方法中修改该字段,因为在此阶段仍在创建对象。
我对这一切都很满意,并同意作者的决定。但是,我担心的是以下内容。回到上面的第一个例子,如果我们尝试请求attr(testInstance, 'testAttribute')
,我们从全局环境中看到它是1
!
据推测,.self
在引用类对象的方法中使用的那个存储在相同的内存位置testInstance
——它是同一个对象。因此,通过在全局环境中成功设置属性testInstance
,而不是作为.self
参考(如第一个示例所示),我们是否无意中触发了全局环境中整个对象的副本?还是以某种方式存储属性的方式“有趣”,即对象可以驻留在同一内存中,但其属性因调用环境而异?
attr(.self, 'testAttribute')
我看不出为什么is NULL
but attr(testInstance, 'testAttribute')
is的其他解释1
。绑定 .self
被一劳永逸地锁定,但这并不意味着它引用的对象不能更改。如果这是所需的行为,那似乎是一个陷阱。
最后一个问题是,是否attr<-
应该在引用类对象上避免上述结果,至少在对象方法中使用结果属性的情况下是这样。
r - 为什么R包.onLoad()中没有定义R5类的继承关系?
我正在尝试在首次加载包时初始化和存储一些包特定信息,并且在如何在 R 中存储一些包特定信息和如何在加载时运行一些代码中找到了很多关于如何执行此操作的好信息包。但是,我想在包加载期间调用的一个函数验证包中定义的几个类的继承关系,但这会返回与我预期不同的结果。我可以想出不同的方法来解决这个问题,但我试图了解我做错了什么,并希望有人可以向我解释。
下面是重现问题的包源代码的最小示例。
现在在 package 期间.onLoad
,extends("myderivedclass", "myclass")
评估为FALSE
(触发警告),但当然,一旦加载包,它评估为TRUE
,这是我所期望的。在工作期间使用任一类初始化对象都.onLoad
很好,因此并不是尚未加载类定义。
非常感谢您在我应该如何进行这种测试.onLoad
或我可能对这里的继承有什么误解的任何帮助。
会话信息:
r - In R, how to print values of fields in a ReferenceClass?
I have a ReferenceClass in R.
How can I add a method "print()" to it, which will print the values of all of the fields in the class?
r - 在 R 中,是否可以禁止“注意:全局变量没有可见绑定”?
我想知道是否有可能在 R 中抑制这些使控制台混乱的输出:
这是代码(它是一个简单的 ReferenceClass 来存储 R 项目的配置):
到目前为止我尝试过的
我已经尝试过预定义变量的组合和排列,将它们预先设置为 null 等,但 R 仍然顽固地在我的源代码中打印数百个“无可见绑定”注释。
说到 R 的内部结构,有没有人比我更聪明?
更新 1
我试过改成Config <-
,Config <<-
这样就去掉了第二个多余的音符。但是,第一个无关注释仍然存在。
更新 2
我开始灰心了,甚至John Chambers 的示例代码也产生了更多这些可怕的、无关的注释。
更新 3
这些注释出现在 Revolution R v7.0 中,但不在 RStudio 中。似乎 Revolution R v7.0 正在调用R CMD check
,通常仅在准备包时使用,因此可以放心地忽略这些注释。
更新 4
Hadley Wickhams 代码也会生成这些注释。显然,可以使用 消除它们utils::globalVariables
,但是,这似乎不适用于较新的 ReferenceClasses。即使完全可以使用它们,哈德利说:
globalVariables 是一个可怕的 hack,我永远不会使用它。
r - 使用 roxygen2 R CMD 检查 codoc mismatches 警告记录参考类
我正在尝试使用 roxygen2 为参考类对象制作文档,但是当我运行 R CMD 检查时,我不断收到此警告:
这是与上述警告相关的 ref 类和 roxygen2 块:
这是生成的 R 文档:
myRefClass-class {testPackaging} R 文档 myRefClass 类
描述
myRefClass 的描述
插槽
field1 一个字符槽
field2 一个数字槽
至于我能找到的文档,codoc 正在测试我的代码和文档之间的一致性。据我所知,所有插槽名称都是相同的;也许我错过了一些东西。不确定文档是否应该自动将其标记为参考类,或者我是否应该以某种方式指出这一点?我发现 R 文档表明插槽“.xData,用于启用从异常类型的继承”,但我不确定它为什么适用于我在这里所做的事情,或者我是否应该对它做一些事情。
我已经尝试了许多 roxygen 标签的排列,并保持接近此处找到的结构似乎给了我最好的结果/来自 R CMD 检查的最少警告:Roxygen2 - 如何@export 引用类生成器? 我一直在网上寻找有关如何将 roxygen2 与参考类一起使用的示例;也许我找错地方了——我运气不太好。
我正在使用 roxygen2 v 3.1.0 / RStudio 版本 0.98.501 / R 版本 3.0.3 / OSX 10.9.2 (注意:尝试升级到 roxygen2 v 4.0 并且它完全被引用类阻塞到没有文档的地步完全生成)
如果有人知道使用 roxygen2 和参考类的 CRAN 包,以便我可以看到它是如何正确完成的,或者如果有人知道我做错了什么,我们将不胜感激。我是 R 包构建的新手。
r - `ReferenceClasses` 和 Imports / Depends 在说明中
我正在开发一个包,其中包含一个ReferenceClass
具有data.table
类字段(在包中定义)的data.table
包:
当我写入包DESCRIPTION
文件时:
一切安好。但是我听说应该尽可能避免使用Depends
,所以我将其重写为:
然而,这在构建包时会引发错误:
Depends
在这种情况下我真的被迫使用吗?
r - 在 R 中保存引用类的实例
我试图重复 R 文档中 ReferenceClasses 帮助页面末尾的示例:
一切正常,除了保存的对象似乎什么都不包含: