2014-10-26 48 views
1

我想使用nrow函数来为我定义的类稍微不同。但我也不想掩盖nrow功能,所以我想重新定义nrow作为R - 使用基函数创建泛型

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

nrow.matrix <- function(x) base::nrow(x) 
nrow.data.frame <- function(x) base::nrow(x) 
nrow.list <- function(x) base::nrow(x) # should return NULL 
nrow.numeric <- function(x) base::nrow(x) # should return NULL 
nrow.character <- function(x) base::nrow(x) # should return NULL 
nrow.ts <- function(x) base::nrow(x) # should return NULL 

是这种东西,犹太?这是做错了吗?

+0

没有尝试过,但也许,如果你给一个“模糊”的属性上您的课功能'nrow'将工作和返回'暗淡(X)[1]'? – flodel 2014-10-26 14:12:09

+0

'nrow'不是原始的。 – Roland 2014-10-26 14:12:35

+0

你是,将编辑。 – csta 2014-10-26 14:13:50

回答

7

只要定义一个默认的方法:

x <- 1 
class(x) <- "myclass" 

nrow <- function(x) UseMethod("nrow") 
nrow.default <- base::nrow 
nrow.myclass <- function(x) 42 

nrow(x) 
#[1] 42 

nrow(matrix(1:15, ncol=3)) 
#[1] 5 
+0

是的,这是正确的,只是发现它,小修改将是定义nrow.default使用UseMethod之前,以便可以,nrow.default < - nrow,但它并不太重要。另外,对于nrow,它可能不是太重要,但它可能更好使用,nrow < - function(...)UseMethod(“nrow”),即使用“...”。 – csta 2014-10-26 14:16:58

+0

为什么两步: 负荷< - 功能(X,...)UseMethod( “负荷”) loadings.default < - 功能(X,...)统计::负载(X) 建议通过一步: setGeneric(“loadings”) – tim 2016-04-09 12:07:04