如何用两个输入编写泛型函数?

时间:2019-04-03 19:36:01

标签: r generic-programming

我是编程的新手,我遇到了R与泛型函数有关的问题:当有多个输入时如何编写它?

举一个简单的例子,关于数据集和函数

z <- c(2,3,4,5,8)
calc.simp <- function(a,x){a*x+8}
# Test the function:
calc.simp(x=z,a=3)
[1] 14 17 20 23 32

现在,我更改z的类: class(z)<-'simp' 由于有两个输入,我应该如何编写通用函数“ calc”? 我的尝试和错误如下:

calc <- function(x) UseMethod('calc',x)
calc(x=z)
Error in calc.simp(x = z) : argument "a" is missing, with no default

calc <- function(x,y) UseMethod('calc',x,y)
Error in UseMethod("calc", x, y) : unused argument (y)

由于我只是一个初学者,我的困惑可能是根本的困惑。请帮忙!非常感谢你!

1 个答案:

答案 0 :(得分:10)

我建议您根据无数基本R函数使用的模板来建模通用函数,例如mean

> mean
function (x, ...) 
UseMethod("mean")

对于您而言,这将转化为以下通用名称(如果我正确理解您的问题)可以正常工作:

calc <- function(x, ...) UseMethod('calc')

calc.simp <- function(a, x) {
    x <- unclass(x)
    a * x + 8
}


## Try it out

z <- c(2,3,4,5,8)
class(z) <- "simp"

calc.simp(x = z, 10)
## [1] 28 38 48 58 88

calc(x = z, 10)
## [1] 28 38 48 58 88