2017-07-31 10 views
0

我正在写一个函数来处理数字输入,对每列进行一系列计算。 Id'就像无缝处理矢量和矩阵输入并返回与输入相同的类的函数。我期待这样的工作类似于diff()的作品。在R中是否存在一个规范模式,或者是否需要对输入类进行if/else处理?用于处理R中可变维度输入的规范模式

我都拿出了迄今为止最好的是:

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

我有点困惑。如果你想计算'max(diff(x))',那么将它应用到一个向量的结果是一个标量(即,只有一个数字,diff的最大值),以及将它应用到矩阵的结果是一个向量(矩阵中每列的一个数字)。那么为什么你会想在第一种情况下返回一个向量而在第二种情况下返回一个矩阵呢?如果你只是从你的代码中删除'if'行,你没有得到你需要的东西吗? –

+0

@Oriol,我的坏。更新示例以正确展示。我想要的实际计算是相当涉及,我不认为他们值得重复这里 – Ethan

+0

类似于https://stackoverflow.com/questions/13039997/writing-generic-function-for-tables-that-works-when-输入 - 恰好是vec?rq = 1 – Ethan

回答

1

我不知道,有一个规范的模式,但diff功能不检查输入是否是为了计算维度矩阵/长度,然后使用r <- unclass(x)对输入进行无类别化,使用if计算r中具有不同路径的矩阵和向量输入的差异,最后在返回r之前重新应用原始类别class(r) <- oldClass(x)。正如你所看到的,这与你所做的事情本质上没有太大的区别,这对我来说似乎很好。

如果你想查询的diff()实施,你可以在控制台输入:

diff.default 
+0

谢谢。我不知道是否可以看到这样的差异代码。我只是复制他们的模式 – Ethan