【发布时间】:2020-12-10 19:55:13
【问题描述】:
通常情况下,R 包包含多个函数,这些函数创建了一些 class 的对象,由包指定,通用或非通用 methods 适用于该类的所有对象。虽然通常很容易找到包中的函数,但我还没有找到任何同样直接的方法来为 S3 类找到 class 本身的精确描述。我认为这至少部分是故意的。类定义可以被视为一种内部工作方式,一方面,用户不必考虑,另一方面,可以由包创建者更改,希望人们不要依赖它们。
但是,我发现有时我想创建相同 class 的其他对象,这些对象与作为 class 方法的包函数一起使用。并且并不总是容易推断出对象必须具有哪些功能才能被封装函数使用,这些函数对 class 的对象执行各种操作,特别是因为不同函数创建的实例可能或可能不完全相同结构。
我目前正在研究的示例是由forecast 包的各种函数创建的forecast 对象。预测包提供了大量以预测对象为输入的函数。 Rob Hyndman 的This blog post 描述了一个进行交叉验证的函数,并需要一个 forecast 类的对象作为参数 tsCV 函数文档说它需要一个“forecastFunction”作为参数,它必须返回一个类 @ 987654334@ 并有一个单变量时间序列作为它的第一个对象(预测,一个假设)并且有一个参数h 给出了地平线。嗯,这听起来很容易。但是在 Hyndman 的相关教科书section 3.6 中,我们被告知预测对象包含有关预测方法、数据、点预测、预测区间、残差和拟合值的信息。这是很多事情,我不确定它们是否都是强制性的,或者是否有些是可选的,或者仅当您打算使用某些方法时才需要。而且我对类的强制性内部结构一无所知。
最后,我特别想知道作为预测包替代品的新寓言包是否使用相同的预测类机制并需要相同的内部结构。如果不是,它们有何不同。我无法在fpp3 或其他地方找到任何描述更改或包含class forecast 对象的类似描述的内容。
如果有一些简单的功能,我会感到尴尬,
you_should_know_this_dummy(package = “forecast”, class = “forecast”),
返回类的详细描述。但是我想尽办法都在寻找这样的功能,但没有找到。
【问题讨论】:
-
我认为你能来的最接近的是
dput或str类的一个对象。 R 当然不强制执行 S3 类文档,实际上代码行z <- structure(list(x = 1, y = 2), class = "blah")创建了一个新 S3 类的一次性对象,该对象在任何地方都没有很好的描述。 -
没有正式要求记录 S3 类,因此没有强制执行。每个包设计者都可以做他们喜欢的任何事情,因此不会有适用于所有包和类的一致方式。所以不可能从一般意义上回答这个问题。如果包作者不提供文档,你能做的最好的就是逆向工程,但这可能很脆弱。或许可以联系开发人员要求澄清。
标签: r class code-documentation help-system s3-classes