如何编写具有两个输入的通用函数?
How to write generic function with two inputs?
我是编程新手,我 运行 遇到了一个关于泛型函数的 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:
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)
我的困惑可能是一个基本问题,因为我只是一个初学者。请帮忙!非常感谢!
我建议您根据无数基本 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
我是编程新手,我 运行 遇到了一个关于泛型函数的 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: 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)
我的困惑可能是一个基本问题,因为我只是一个初学者。请帮忙!非常感谢!
我建议您根据无数基本 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