我意识到使用 S3 类结构的好处。是否有任何建议使用哪个变体:
fun.class1 <- function(x, ...)
fun.class2 <- function(x)
看来,他们总是同时工作......
可重现的例子:
fun.default <- function(x) {
print("default")
return(x)
}
fun.class1 <- function(x, ...) {
print("class1 ellipsis")
res <- x[y]
return(res)
}
fun.class2 <- function(x) {
print("class2 only x")
res <- x[y]
return(res)
}
my_fun <- function(x) {
res <- UseMethod("fun")
return(res)
}
x <- structure(c(1, 2), class = c("numeric", "class1"))
y <- 1
my_fun(x)
# [1] "class1 ellipsis"
# [1] 1
x <- structure(c(1, 2), class = c("numeric", "class2"))
y <- 1
my_fun(x)
# [1] "class1 ellipsis"
# [1] 1
简而言之:
使您的接口尽可能小。
转换为您的省略号问题:仅在您真正需要时使用省略号。
恕我直言,您应该只在真正使用省略号时才引入省略号。我能想到我目前看到的三个案例:
简而言之,我建议如下:
只要您正在编写主要由您自己使用或由另一个函数调用的 S3 类:不要仅仅因为将来某天可能会使用它而引入任何省略号参数。只介绍你真正使用的参数。一旦需要上述用例之一,请立即引入省略号。
希望这可以帮助。
而另一条线索:看来,他们总是工作都..。不,我不这么认为。在您的示例中,它们全部起作用,因为它们y
在全局环境中找到。另请参见此处。据我所知,您应该将这两个版本my_fun(x, ...)
分别视为my_fun(x, y)
..
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句