用ginv替换默认的solve()

时间:2016-04-28 12:40:49

标签: r

我想在mahanalobis函数中将solve()替换为ginv()

有没有办法强制R中的任何函数使用ginv()代替solve()

2 个答案:

答案 0 :(得分:2)

mahalanobis功能非常简单。为什么不用适当的替代来定义自己的替代品,即

mahalanobis_ginv <- function (x, center, cov, 
          inverted = FALSE, ...) {
    x <- if (is.vector(x)) 
        matrix(x, ncol = length(x))
    else as.matrix(x)
    if (!identical(center, FALSE)) 
        x <- sweep(x, 2L, center)
    if (!inverted) 
        cov <- MASS::ginv(cov, ...)
    setNames(rowSums(x %*% cov * x), rownames(x))
}

来自?mahalanobis

 ma <- cbind(1:6, 1:3)
 (S <-  var(ma))
 mahalanobis(c(0, 0), 1:2, S)  ## 5.37037
 mahalanobis_ginv(c(0, 0), 1:2, S) ## 5.37037

答案 1 :(得分:0)

您可以输入 trace(mahalanobis, edit = T) 并进行必要的替换。当点击保存时,对函数所做的更改将只存储在当前 R 会话中。