问题标签 [r-s3]

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 投票
1 回答
1368 浏览

r - 如何覆盖 R 中的默认 S3 函数?

由于错误,我想覆盖默认的 predict.lm 函数:

给出这个错误:

我知道错误在哪里,并且我已经发送了一封电子邮件,等待核心邮件列表的批准,但同时我想测试我自己的 predict.lm 函数来解决这个问题。我知道我需要重新定义 S3 函数以进行预测,但是在运行此代码时:

getMethod 按预期返回我的新函数,但 termplot 仍然运行旧函数。还显示旧的methods("predict")predict.lm 仍然存在,我认为这可能是调用顺序或我需要调整的东西。任何熟悉如何做到这一点的人?

0 投票
1 回答
181 浏览

r - 使用 S3 方法将参数捆绑到 R 中的数据框中

我创建了一个函数,该函数具有相当多的参数(所有向量的长度相同),我认为能够将参数捆绑在数据框中会使生活变得更容易。我已经设法使用 S3 方法实现了这一点,但是阅读更多关于 S3 方法的信息后,我开始怀疑我编写函数的方式是否有点滥用 S3 约定。

我想知道我所做的是否是一个坏主意。如果是这样,替代方法将受到欢迎。

这是我所做的一个简化示例:

mydata然后,如果我有一个包含列名Money, time,的数据框AGEweight然后name像这样的调用myfunc(mydata)会将相关数据传递给myfunc.default. 这一切都很好,但它是明智的吗?

0 投票
3 回答
812 浏览

r - 使用 S3 为“+”方法模拟多个调度 - 可能吗?

我有两个类(ab),我想+为它们定义方法。对于这两个类的四种可能组合,我需要不同的方法,即:

我知道我可以使用 S4 进行多次调度,但我想知道是否有办法使用 S3 来模拟这种行为。我的方法如下:

所有这些都可以正常工作,但是当然没有定义以下内容。

现在为了涵盖这种情况,我添加了另一个方法定义。

这将导致b + b工作,但现在a + bb + a方法不一致,将导致错误。

有没有办法使用 S3 正确定义所有四种情况?

0 投票
1 回答
678 浏览

r - Why does the default S3 method gets called when I pass a vector to the method and the vector S3 method is implemented?

I have defined the following in R:

Now if I test the following example:

it will print "Default method does nothing" indicating that the S3 framework matches the default method instead of the vector method. Now why is that?

0 投票
1 回答
1860 浏览

r - 覆盖基础 R 中的 S3 方法

我试图在教学时使用的本地包中覆盖 R stats 包中的 print.anova() 函数。基本上,我想删除标题的打印并添加一个“总计”行而不用新类创建一个新函数(例如,ANOVA())。

该函数如下所示:

我的问题是我不确定是否将其导出为函数、方法、S3 方法、它们的某种组合或完全其他的东西。例如,当我尝试这个(roxygenize 代码的一部分)时:

运行 Rcmd 检查时收到以下警告:

但是当我加载我的包时,该功能按预期工作。

但是,如果我尝试这个:

Rcmd 检查没有收到任何警告或错误,但是当我尝试在 R 中使用该函数时,它会在 stats 包命名空间中找到原始函数。此外,如果我这样做

我明白了

最后,对于这个版本(不是使用export,而是使用method和s3method),我的roxygen-developer命名空间里面有以下项

导致我困惑的是,我似乎已经成功地使用其他函数做了类似的事情(例如,使用 print.summary.lm 的方法和 S3method 版本)。

如果能帮助我理解我在这里做错了什么(或者我如何最终实现这个目标),我将不胜感激。预先感谢您的任何帮助。

ps,就其价值而言,我使用的是 Windows 7(32 位)、R 2.15.2 并使用 RStudio。

0 投票
1 回答
3581 浏览

r - 使用 Roxygen 构建 R 包时的 S3 方法一致性警告

我为使用 S3 类的函数创建了一个 roxygen 文件。我 roxygenize 然后构建并检查并收到警告:

所以我花时间研究:

http://cran.r-project.org/doc/manuals/R-exts.html#Generic-functions-and-methods & https://github.com/hadley/devtools/wiki/S3

但我无法弄清楚我在下面的文件中做错了什么。该功能按预期工作。
1)为什么会出现警告?2)我怎样才能让它消失?

0 投票
1 回答
1658 浏览

r - S3方法帮助(roxygen2)

我正在尝试在包中使用 S3 方法,并在此处提出问题后认为我理解了如何设置它:使用 Roxygen 构建 R 包时的 S3 方法一致性警告

但现在我得到了我没想到的结果。如果我直接在 R 中运行下面的代码,它会给我预期的结果,但如果我将它编译到一个包中,我不会得到正确的结果(请注意,当它应该只取唯一单词时,单词 the 被计数两次vector a)。我不确定我设置不正确。

.R 文件:

从命令行运行代码(预期行为):

打包编译后的输出:

0 投票
1 回答
76 浏览

r - 逻辑运算后保留的 integer64 的子类 (R)

当我从 bit64 对 integer64 对象进行子类化然后执行相等测试时,结果包含逻辑数据,但仍归入我的类而不是逻辑。例如,整数不会发生这种情况。

示例代码:

返回

请注意,它仍然有类“Foo”

而如果我们对整数做同样的事情:

它返回逻辑

知道为什么会这样吗?

0 投票
2 回答
197 浏览

r - S3 类的默认元素

我想知道 R 中的 S3 类,是否可以选择定义默认输出元素并保持其余元素隐藏。例如,假设我们有一个玩具函数,它计算某些事物并将它们作为 S3 类报告回来,如下所示:

当我们现在通过

正如预期的那样,我们将整个列表作为输出。但是如果我们也定义了一个 S3 打印方法

我们可以为 print 提供一个标准输出,它隐藏了不必要的信息(在这种情况下resBx)并且用户只能看到resA。但这可能会导致一些混乱,当你想对你的对象应用进一步的计算时toy,例如

我现在的问题是,有没有办法将列表项定义resA为 S3 类的标准值,如果未指定变量,则应采用该标准值,以便res + 1调用也能正常工作?

感谢您阅读本文。

0 投票
3 回答
1614 浏览

r - 显示与特定类关联的方法

我想查看与某个对象类关联的所有方法的列表。例如,如果我看到某个模型拟合例程返回类“foo”的对象,我想知道包(或任何其他包)是否定义了诸如simulate.fooupdate.foocoef.foo等方法print.foo。我该怎么做?

我知道这methods解决了逆问题(假设是一个 S3 类),但显然我不想搜索每个定义了print函数的对象,以便找出我感兴趣的类是否有一个。我可能在这里忘记了一些非常简单的事情。谢谢!

(理想情况下,很高兴看到 S3 和 S4 类的解决方案)。

更新:理想情况下,解决方案应该显示隐藏的方法,就像methods函数一样。例如,methods("simulate")显示:

所以在查询与lm类关联的方法时,我们希望恢复这个模拟方法。