问题标签 [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.
r - 如何覆盖 R 中的默认 S3 函数?
由于错误,我想覆盖默认的 predict.lm 函数:
给出这个错误:
我知道错误在哪里,并且我已经发送了一封电子邮件,等待核心邮件列表的批准,但同时我想测试我自己的 predict.lm 函数来解决这个问题。我知道我需要重新定义 S3 函数以进行预测,但是在运行此代码时:
getMethod 按预期返回我的新函数,但 termplot 仍然运行旧函数。还显示旧的methods("predict")
predict.lm 仍然存在,我认为这可能是调用顺序或我需要调整的东西。任何熟悉如何做到这一点的人?
r - 使用 S3 方法将参数捆绑到 R 中的数据框中
我创建了一个函数,该函数具有相当多的参数(所有向量的长度相同),我认为能够将参数捆绑在数据框中会使生活变得更容易。我已经设法使用 S3 方法实现了这一点,但是阅读更多关于 S3 方法的信息后,我开始怀疑我编写函数的方式是否有点滥用 S3 约定。
我想知道我所做的是否是一个坏主意。如果是这样,替代方法将受到欢迎。
这是我所做的一个简化示例:
mydata
然后,如果我有一个包含列名Money
, time
,的数据框AGE
,weight
然后name
像这样的调用myfunc(mydata)
会将相关数据传递给myfunc.default
. 这一切都很好,但它是明智的吗?
r - 使用 S3 为“+”方法模拟多个调度 - 可能吗?
我有两个类(a
和b
),我想+
为它们定义方法。对于这两个类的四种可能组合,我需要不同的方法,即:
我知道我可以使用 S4 进行多次调度,但我想知道是否有办法使用 S3 来模拟这种行为。我的方法如下:
所有这些都可以正常工作,但是当然没有定义以下内容。
现在为了涵盖这种情况,我添加了另一个方法定义。
这将导致b + b
工作,但现在a + b
和b + a
方法不一致,将导致错误。
有没有办法使用 S3 正确定义所有四种情况?
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?
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。
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)我怎样才能让它消失?
r - S3方法帮助(roxygen2)
我正在尝试在包中使用 S3 方法,并在此处提出问题后认为我理解了如何设置它:使用 Roxygen 构建 R 包时的 S3 方法一致性警告
但现在我得到了我没想到的结果。如果我直接在 R 中运行下面的代码,它会给我预期的结果,但如果我将它编译到一个包中,我不会得到正确的结果(请注意,当它应该只取唯一单词时,单词 the 被计数两次vector a
)。我不确定我设置不正确。
.R 文件:
从命令行运行代码(预期行为):
打包编译后的输出:
r - 逻辑运算后保留的 integer64 的子类 (R)
当我从 bit64 对 integer64 对象进行子类化然后执行相等测试时,结果包含逻辑数据,但仍归入我的类而不是逻辑。例如,整数不会发生这种情况。
示例代码:
返回
请注意,它仍然有类“Foo”
而如果我们对整数做同样的事情:
它返回逻辑
知道为什么会这样吗?
r - S3 类的默认元素
我想知道 R 中的 S3 类,是否可以选择定义默认输出元素并保持其余元素隐藏。例如,假设我们有一个玩具函数,它计算某些事物并将它们作为 S3 类报告回来,如下所示:
当我们现在通过
正如预期的那样,我们将整个列表作为输出。但是如果我们也定义了一个 S3 打印方法
我们可以为 print 提供一个标准输出,它隐藏了不必要的信息(在这种情况下resB
和x
)并且用户只能看到resA
。但这可能会导致一些混乱,当你想对你的对象应用进一步的计算时toy
,例如
我现在的问题是,有没有办法将列表项定义resA
为 S3 类的标准值,如果未指定变量,则应采用该标准值,以便res + 1
调用也能正常工作?
感谢您阅读本文。
r - 显示与特定类关联的方法
我想查看与某个对象类关联的所有方法的列表。例如,如果我看到某个模型拟合例程返回类“foo”的对象,我想知道包(或任何其他包)是否定义了诸如simulate.foo
、update.foo
、coef.foo
等方法print.foo
。我该怎么做?
我知道这methods
解决了逆问题(假设是一个 S3 类),但显然我不想搜索每个定义了print
函数的对象,以便找出我感兴趣的类是否有一个。我可能在这里忘记了一些非常简单的事情。谢谢!
(理想情况下,很高兴看到 S3 和 S4 类的解决方案)。
更新:理想情况下,解决方案应该显示隐藏的方法,就像methods
函数一样。例如,methods("simulate")
显示:
所以在查询与lm
类关联的方法时,我们希望恢复这个模拟方法。