r - 是否可以仅根据其位置指定的参数类来调度 S3 方法?
问题描述
想象一下,我们有以下 S3 泛型,我们想使用第一个参数的类进行调度:
genfun <- function(x, ...) UseMethod("genfun", x)
现在让我们考虑numeric
这个泛型的方法:
genfun.numeric <- function(x, y) {
x[y]
}
以下调用工作得非常好:
genfun(1:5, 3)
值得注意的是,方法的参数名称似乎不需要与泛型的名称匹配。事实上,如果我们这样定义numeric
方法:
genfun.numeric <- function(a, b) {
a[b]
}
它也有效:
genfun(1:5, 3)
但是,以下调用失败:
genfun(a = 1:5, b = 3)
然而,如果我们返回与泛型参数名称匹配的方法的第一个定义:
genfun.numeric <- function(x, y) {
x[y]
}
带有命名参数的调用工作得很好:
genfun(x = 1:5, y = 3)
或者:
genfun(y = 3, x = 1:5)
有没有办法使方法定义基于参数a
并且b
在使用命名参数调用时也可以工作?
解决方案
就在这里。定义除了点参数之外没有参数的泛型。
genfun <- function(...) UseMethod("genfun")
现在这两种方法都可以使用或不使用命名参数。
genfun.numeric <- function(x, y) {
x[y]
}
genfun(1:5, 3)
#[1] 3
而另一个。
genfun.numeric <- function(a, b) {
a[b]
}
genfun(1:5, 3)
#[1] 3
genfun(a = 1:5, b = 3)
#[1] 3
推荐阅读
- django - 在 Django 中创建和注释简单的地理地图
- android - 在暂停的应用启动时附加 frida(等待调试)
- swift - 服务器端 Swift URLSession.shared.dataTask 和 JSONSerialization.jsonObject 苦苦挣扎。如何创建一个有效的字典?
- c - 学生管理系统使用链表删除部分出错
- linux - 无法在 CMakeList.txt 中为 Kdevelop 设置 GCC 8.1
- javascript - 使用缩小的外部 OpenLayers 和 webpack 时的错误
- ios - 试图在同一个 UIView 元素上调用 UIView 的两个扩展
- sql - Postgresql - 如何根据唯一行的总数创建条件
- java - 如何通过 FirefoxProfile 启动 Mozilla 浏览会话?
- php - 如何配置本地 MySQL 连接(Sequel Pro & Laravel)?