我正在编写一个处理数字输入的函数,对每列进行一系列计算。 Id'喜欢无缝处理向量和矩阵输入的函数,并返回与输入相同的类。我希望这个工作类似于diff()
的工作方式。是否存在在R中实现此规范的规范模式,或者我是否需要对输入的类进行if / else处理?
bar <- function(x) {
m <- as.matrix(x)
m <- apply(m, 2, function(z) log(diff(z)))
if (is.null(dim(x))) m <- drop(m)
return(m)
}
答案 0 :(得分:1)
我不知道那里有规范模式,但是diff
函数确实检查输入是否是矩阵以便计算维度/长度,然后使用{对输入进行解除分类{1}},计算r <- unclass(x)
与矩阵和向量输入的不同路径的差异(使用r
),最后在返回if
之前使用class(r) <- oldClass(x)
重新应用原始类}。正如你所看到的,这与你所做的事情本质上并没有多大区别,这对我来说似乎很好。
如果要检查r
的实现,可以在控制台中输入:
diff()