问题标签 [s4]
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.
class - R类:S3 vs S4
我想在 R 中创建一个类,我应该使用 S3 还是 S4 类?
我读了很多关于他们的不同的东西,有没有一个比另一个更好?
oop - 有没有办法初始化 S4 对象以便返回另一个对象?
我有一个类层次结构,其超类fb
不应该存在任何对象(我尝试了虚拟类,但遇到了无法从虚拟类初始化对象的问题)。此外,我有两个具有相同插槽的子类 ( foo
, )。bar
现在我想创建一个新对象,对超类使用初始化方法,该方法根据某个值返回子类之一的对象:
显然(并且可能有充分的理由)R 不允许这样做。有没有办法在方法中实现我想要的,而不是在创建新对象时使用 if-else 构造?
r - 以编程方式区分 R 中的 S3 和 S4 对象
如果给定一个对象x
,有没有办法分类它是S3
或S4
(或“其他”)?我看过is.object()
and isS4()
,并且可以确定某物是一个对象(或不是),它是一个 S4 对象(或不是)。但是,在我看来,S3 对象并不是所有不是 S4 对象的对象的补充。
因此,如何以编程方式完成这些任务?
这是一个让我烦恼的例子,取自以下帮助is.object()
:
这是否意味着这a
是一个S3
对象?
r - 使用表达式作为参数调度 S4 方法
我试图说服 S4 方法使用表达式作为参数,但总是返回错误。一个简单的例子说明了我在这里尝试做的事情:
如果我现在尝试:
如果我理解正确的话,似乎这些论点已经在泛型中进行了评估。因此,将表达式向下传递给方法似乎至少很棘手。是否有可能使用表达式使用 S4 调度方法?
编辑:更改为转换,因为它是一个更好的例子。
oop - 在 R 中使用 callNextMethod() 传递参数的问题
我的问题:
为什么callNextMethod()
没有按预期将参数传递给下一个方法?
情况:
假设我有两个分层类foo
和bar
(bar
是 的子类foo
),我有一个foobar
可以为这两个类分派的方法(即,两个类都有方法)。
此外,(子)类的方法在一些计算之后bar
调用方法。foo
callNextMethod()
两种方法都有相同的附加参数(默认),应该传递给 for 的方法foo
,只有它是相关的。
问题描述:
参数没有按预期传递,但默认值取自方法定义。具体来说,在第一个方法中,参数与调用 ( ) 中指定的一样,但是,它在下一个方法中TRUE
更改为。FALSE
给
我希望another.argument
将 传递给下一个方法,以便它TRUE
也在对该方法的调用中foo
。
据我所知?callNextMethod
,它应该按预期工作(即,命名参数在调用中传递):
对于出现在原始调用中的形式参数,比如 x,在下一个方法调用中存在一个对应的参数,等效于 x = x。实际上,这意味着下一个方法看到相同的实际参数,但参数只计算一次。
我的第二个问题:如何将 another.argument 传递给下一个方法。(我真的很想在这两种方法中保留默认参数)
r - 如何在 R 中开发一个包?
我已经编写了一些R
使用 S4 类的函数。
现在我想用R
这些函数构建一个包。
我应该如何进行?因为我使用了 S4 课程,我应该做些什么不同的事情吗?
r - 如何使用 roxygen2 正确记录 S4 方法
我在 SO 和其他地方看到了一些关于在 Roxygen2 的未来版本中应该或将如何完成的讨论。但是,我被困住了。我应该如何使用 Roxygen2 记录 S4 泛型及其方法?全新泛型/方法的工作示例以及扩展基本 S4 泛型的示例将非常有用。我不想为相同泛型的每个 S4 方法制作单独的(大部分)冗余文档。
尽职调查:我找到了“提取”方法的一个有用示例。但是,对于我的问题,它似乎已经过时且不完整。它在类文档中使用 @slot 标记,该标记不再(不再?)支持。它仅显示核心 S4 方法“[”的扩展,而不是包含 S4 泛型文档的完整 Roxygen 示例。
如何使用 roxygen 正确记录 S4“[”和“[<-”方法?
如果我用 title、description 完整记录一个新的 S4 泛型,@param @return @name @aliases
@docType @rdname
然后只用相应的 记录 S4 方法@name @aliases
@docType @rdname
,我会收到以下R CMD check
警告:
乍一看,好像我用 roxygen2 以这种方式记录的 S4 方法都没有真正起作用。然而,到目前为止,我注意到我对核心方法“show”的扩展没有相关的错误,即使它们的记录方式与其他方法完全相同。这是我在其中一种显示方法上方包含的完整 roxygen 文档的示例,它没有生成缺少文档的错误:
因此,我不知所措。如您所见,我已经包含了R 包手册的 S4 文档部分中描述的 S4 方法的别名约定,即方法应该有一个具有以下名称的别名(不含空格):
不知何故,这并没有被完全理解R CMD check
。
最后,在使用以下命令构建文档后:
并构建包,我得到了功能文档。特定方法文档中的任何标题都会出现在“描述”字段中,相当尴尬。所以 roxygen2 显然对每个方法的文档做了一些事情,并且走上了正确的轨道。然而,仅仅避免一个大而令人不安的警告是不够的
我查看了 Rd 文件,但我对它们的了解更少,无法快速了解问题所在,而且我无论如何都想知道 roxygen2 解决方案,这样我就不必在每次文档修订后直接操作 Rd 文件。
所以这是一个多部分的问题:
roxygen2 的 S4 通用和 S4 方法文档的当前推荐方法是什么?
是否有一个很好的例子可以显示完整的细节?
大多数 S4 方法的文档丢失的警告可能是什么原因和解决方案(即使具有“缺少”文档的方法实际上已经由 roxygen2 解析了它们的文档,并且生成的 Rd 文件至少足以工作在包后
R CMD build mypkgname
)?
class - 如何使用 Roxygen2 正确记录 S4 类插槽?
对于使用 roxygen(2) 记录类,指定标题和描述/细节似乎与函数、方法、数据等相同。但是,插槽和继承是它们自己的一种动物。在 roxygen2 中记录 S4 类的最佳实践是什么(当前的或计划的)?
尽职调查:
我发现@slot
在 roxygen 的早期描述中提到了一个标签。
一个 2008 R-forge 邮件列表帖子
似乎表明这已经死了,并且@slot
在 roxygen 中不支持:
roxygen2 是这样吗?前面提到的帖子建议用户应该使用 LaTeX 标记制作自己的逐项列表。例如,扩展该类的新 S4 类"character"
将被编码和记录如下:
然而,尽管这可行,但这种记录插槽\describe
的\item
方法似乎与 roxygen(2) 的其余部分不一致,因为没有- 分隔的@
标签,并且插槽可能会在roxygenize()
. 它也没有说明记录正在定义的类的继承的一致方式。@import
我想依赖通常仍然可以使用标签正常工作(如果特定插槽需要来自另一个包的非基类) 。
那么,总而言之,roxygen(2) 插槽的当前最佳实践是什么?
目前似乎有三个选项需要考虑:
- A -- 分项清单(如上例)。
- B -
@slot
...但我错过了额外的标签/实现。我无法让@slot 与 roxygen / roxygen2 在上面示例中作为逐项列表的替代品的版本中使用。同样,上面的示例确实适用于 roxygen(2)。- C - 一些用于指定插槽的替代标签,例如
@param
,可以完成同样的事情。
我正在从我在githubroxygen2
上的开发页面上发表的帖子中借用/扩展这个问题。
r - 如何在R中将插槽的默认值设置为NULL?
我是 R 的新手。
我正在尝试定义一个类似于树节点的类,即它有一个左节点和右节点,它们应该与父节点属于同一类。所以我定义类如下:
我想通过设置原型将 Node 的默认值设置为 NULL,但 R 表示如下:
但是如果我没有将默认值指定为 NULL,那么默认值将是深度为 4 的递归节点,我认为这会浪费资源。
我的考虑是不必要的还是有更好的方法呢?