R 使现有函数成为泛型函数

R 使现有函数成为泛型函数,r,R,我想使现有函数成为泛型函数。因此,默认情况应该与以前相同,但我想为自己的数据结构添加一个情况 于是我苏醒过来。对于像data.frame这样的类,它的工作原理与预期类似,但对于我自己的类(类属性集),它只调用默认函数: >setGeneric('dim') >dim.data.frame df dim(df) 42 如果我用自己的类交换data.frame,它将不起作用,只调用默认的dim函数。我无法重现您的问题。对我来说: dim.test <- function(x) 23 x &l

我想使现有函数成为泛型函数。因此,默认情况应该与以前相同,但我想为自己的数据结构添加一个情况

于是我苏醒过来。对于像
data.frame
这样的类,它的工作原理与预期类似,但对于我自己的类(类属性集),它只调用默认函数:

>setGeneric('dim')
>dim.data.frame df dim(df)
42

如果我用自己的类交换
data.frame
,它将不起作用,只调用默认的
dim
函数。

我无法重现您的问题。对我来说:

dim.test <- function(x) 23
x <- 2
class(x) <- "test"
dim(x) 

dim.test以下是Rstudio团队如何用您要求的条件替换现有函数,使其成为通用函数:现有函数成为默认函数

我会这样做:

dim <- function(x) UseMethod("dim")

dim.default <- function(x) base::dim(x)

dim.test <- function(x) 42

dim(mtcars)
#> [1] 32 11

mydata <- mtcars
class(mydata) <- "test"
dim(mydata)
#> [1] 42

dim可以显示未按预期工作的代码?请提供一个示例,说明您的类是如何不同的。如果我们无法重现您所经历的错误,则很难看出可能有什么问题。感谢您的解决方案。不幸的是,如果调用例如
nrow
ncol
,这将不起作用。这里使用的是基本dim,而不是我自己的数据类型的函数。那么为什么不用同样的方法覆盖函数nrow和ncol呢?我认为,如果您提供更多关于您的问题和目标的详细信息,我们可以提出一个解决方案。实际上,如果您尝试运行nrow(mydata),它将返回42,而ncol(mydata)将返回NA,正如所预期的那样。也许我错过了一些你想要实现的东西