我创建了一个函数,该函数具有相当多的参数(所有向量的长度相同),我认为能够将参数捆绑在数据框中会使生活变得更容易。我已经设法使用 S3 方法实现了这一点,但是阅读更多关于 S3 方法的信息后,我开始怀疑我编写函数的方式是否有点滥用 S3 约定。
我想知道我所做的是否是一个坏主意。如果是这样,替代方法将受到欢迎。
这是我所做的一个简化示例:
myfunc <- function(x, ...) UseMethod("myfunc")
myfunc.default(time, money, age, weight) {
# a silly calculation
return(money/(age + weight) - time)
}
myfunc.data.frame <- function(params, ...) {
names(params) <- tolower(names(params))
pass.args <- intersect(names(params), names(formals(myfunc.default)))
res <- do.call(myfunc.default, c(params[pass.args], ...))
return(res)
}
mydata
然后,如果我有一个包含列名Money
, time
,的数据框AGE
,weight
然后name
像这样的调用myfunc(mydata)
会将相关数据传递给myfunc.default
. 这一切都很好,但它是明智的吗?