问题标签 [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 - S3 类的这些方括号是什么?
我从git 上的一个开源存储库中获得了这个。这显示了 S3 类的泛型和方法的编写。但我不理解分配函数的符号或约定。以下是我的问题:
- 使用反引号
``
来定义函数名。通常我们不会使用反引号甚至双引号来分配变量/函数,但我看到这种情况发生了很多次。这是命名约定吗? - 为什么
.
包含在 blob 名称之前?通常它不会被称为 blob 而一个方法是 method.blob 吗? - 为什么那里有
[
括号?特别是,[<-
和[[<-
。我们是否在执行某种双重分配?
希望有人能够阐明什么是哈
r - 卡在自动绘图的 S3 方法的定义中
我坚持为autoplot
.
我有以下(完整的代码在这里):
据我所知,我应该能够运行,但它失败了:
为什么找不到功能?我有一个适当的@importFrom ggplot2 autoplot
Roxygen 产生正确NAMESPACE
的 .
里面有一个ggplot2
。Imports
DESCRIPTION
我不知道为什么它不起作用以及为什么我需要library(ggplot2)
使用它。
r - 未在包中导入的类的 S3 方法
我们在 R 包中为不同的类提供了多种方法,但它们都与我们在描述中导入的包相距甚远。
现在,我们想为到目前为止不依赖于我们包的类编写更多方法。这很好用,如果必要的包在命名空间中,因此类是 R 已知的。然后,我们不需要在我们的包中导入包。
但是,这样做感觉有点不对劲。这种情况有最佳实践吗?不导入它的优点是依赖项更少,缺点是用户必须主动加载带有他想要使用我们功能的类的包。
更新
@RolandEnhances
实际上读起来就像我们追求的东西 - 尽管到目前为止我从未在任何包装中看到它。但是,我们并没有真正访问对象......as
包中有一个修改为强制,但它是通过方法导出的,所以我们需要导入方法。
我们唯一要做的是:
r - 为新类定义 S3“数学”组泛型时出现意外的 log2 错误
我正在尝试将 S3“数学”组泛型用于自定义类。但是我得到了一个奇怪的结果:log()
同时工作log2
并log10
产生错误。下面是一个最小的例子:
现在尝试调用log
:
以 2 为基数:
以上所有工作。但现在log2
包装:
也许有人可以帮助我弄清楚这里发生了什么?log2 实际上是否经历了 2 次通用数学定义并失败了?
r - 通过引用将类添加到 data.frame 列
我想为data.frame
(等)创建一个子类。我想要一个创建类信息的函数和另一个删除它的函数。
我认为这将是“R 认可”的添加类的方式。添加然后删除该类按预期工作,返回未触及的对象。
但是,如果我想通过引用更改对象,则此方法不起作用,因为class<-
似乎复制了 data.table:
文档说通过引用设置属性的data.table
正确方法是使用setattr
,并且确实,此功能确实按预期工作
但问题是,当使用相同的逻辑来删除类时,对象并没有完全回到以前的状态
该问题并非特定于data.table::setattr()
,因为常规
attr<-
函数在更改class
属性时具有相同的问题
我的猜测是,它的作用与and
class<-
不同。但后来我意识到,这似乎只有在我更改列的类时才会发生。更改整个对象的类按预期工作。attr<-
setattr()
这不是一个大问题,但它确实让正确测试变得很痛苦,因为我不能testthat::expect_equal()
用于单元测试。
那么,data.frame
通过引用更改列的类的正确方法是什么?由reprex 包(v0.2.0)于 2018-08-29 创建。
r - 如何在 R 中的 S3 对象上定义应用程序方法?(就像 C++ 中的“函数对象”)
我在这里试图解决的问题是需要应用(执行)一个 S3 对象,该对象本质上是一个类似向量的结构。这可能包含在某个阶段我需要评估单个参数的各种公式,以便返回原始形状的类似矢量的对象,其中包含在给定参数处对其组成公式的评估。
这方面的例子(只是为了说明)可能是一个变换矩阵 - 比如说旋转 - 对于给定的旋转,它将采用旋转的角度,并产生一个值矩阵,该矩阵乘以一个点。另一个例子可能是经典力学问题中的状态向量。然后给定t,v,a等,它可以返回s ...
现在,我已经在 S3 中创建了我的容器对象,并且它在大多数方面都可以正常工作,使用通用方法;我还发现 Ops.myClass 运算符重载系统非常有用。
为了完成我的课程,我现在需要的只是一种将其指定为可执行文件的方法。我看到有各种机制可以部分完成我想要做的事情,例如我想这as.function()
会将对象转换为我想要的行为,并且类似的东西lapply()
可以用于将参数“反向”应用于函数。我不知道该怎么做是将它们全部链接起来,以便我可以做这样的模型:
(是的,我已经指定了一个通用的print()
例程,让它看起来不错)
欢迎所有建议、示例代码、示例链接。
PS =====
我根据要求添加了一些基本的示例代码。我不确定多少会太多,所以完整的工作最小示例,包括运算符重载在此要点中。
我只在下面显示构造函数和辅助函数:
上述代码的行为如下:
我需要的是它能够做到这一点:
r - 如何将 S4 插槽选择器`@`重载为通用函数
我试图将@
R 中的运算符变成 S3 系统的通用函数。
基于编写 R 扩展中的章节:添加新的泛型我尝试像这样实现泛型@
:
但是,这似乎不起作用,因为它破坏@
了 S4 方法。我使用Matrix
包作为 S4 实例的示例:
(Matrix::Matrix(1:4, nrow
@.default
= 2, ncol = 2), Dim) 中的错误:“dgeMatrix”类的这个对象没有名称“name”的插槽
如何实现泛型@
以便在 S4 类的情况下正确调度?
编辑
还对为什么它可能不是一个好主意的意见感兴趣?
r - 如何在 R 中为 S4 对象创建自定义打印方法
我创建了一个自定义类和打印方法:
如果我使用它工作正常print(test)
:
但是,如果我只是在没有 的情况下运行变量本身print()
,它会以不同的方式显示。
当我在不使用的情况下运行自定义打印方法时,我应该怎么做才能使它以相同的方式工作print()
?
谢谢!
r - 为泛型类定义 S3 方法
我想创建一个+
粘贴character
对象的方法。一种可能的方法是使用中缀运算符:
但是,我想知道是否可以用 S3 方法做同样的事情。您可以通过创建一个新类来做到这一点,比如说char
,然后执行以下操作:
但是,如果您尝试创建一个+.character
方法,它就不起作用:
但是,如果您character
手动分配类,它确实有效:
所以我只是想知道我在这里缺少什么,以及是否可以为泛型类实际定义 S3 方法。
编辑:根据@Csd
答案,尚不清楚这是由于属性造成的,因为如果您定义自己的函数,例如:
然后它确实有效。
r - dplyr::do 内部函数的方法调度
我将如何实现内部函数的方法分派dplyr::do
?
我已经阅读了 GitHub 问题#719、#3558和#3429,这些问题提供了有关如何为dplyr
动词创建方法的有用信息,但没有什么特别适用的信息dplyr::do
- 这有点“特殊”,因为调度不仅需要为dplyr:do
自己发生,也需要为内部调用的函数发生dplyr::do
(或者至少这就是我所追求的)
这是我尝试过的:
预赛
第 1 步:尝试为 dplyr 动词定义方法
第 2 步:尝试为另一个 dplyr 动词定义一个方法来测试更长的管道
第3步:尝试相同的do
虽然这看起来不错,但问题是调用了默认方法而不是自定义方法。foo
由reprex 包(v0.2.1)于 2019 年 1 月 8 日创建