我有一个关于在 R 中使用 S3 类做某事的“正确”方法的问题。我想做的是有一个方法来更改类,然后在新类上调用相同的方法。像这样的东西:
my_func <- function(.x, ...) {
UseMethod("my_func")
}
my_func.character <- function(.x, ...) {
return(paste(".x is", .x, "of class", class(.x)))
}
my_func.numeric <- function(.x, ...) {
.x <- as.character(.x)
res <- my_func(.x) # this should call my_func.character
return(res)
}
这有效。当我执行以下操作时,我都可以character
上课
> my_func("hello")
[1] ".x is hello of class character"
> my_func(1)
[1] ".x is 1 of class character"
我的问题是:这是正确的方法吗?在我转换类之后(这一行res <- my_func(.x)
)重新调用相同的方法感觉很奇怪。
我觉得NextMethod()
必须以某种方式成为答案,但我已经阅读了一堆关于它的文档(例如this和this)但他们都在谈论这件事,它正在跳到类列表中的下一个类,比如从例如data.frame
,直到matrix
您拥有class(df)
并获得c("data.frame", "matrix")
。
但是他们都没有谈论这种情况,即您将其转换为不在原始层次结构中的完全不同的类。所以也许NextMethod()
不是正确的使用方法,但还有其他东西,还是我应该像拥有它一样离开它?
谢谢!