【问题标题】:R function to compute deviation matrixR函数计算偏差矩阵
【发布时间】:2015-12-17 15:55:30
【问题描述】:

我编写了一个函数来计算一个矩阵,其中每一列是对应的输入矩阵列减去列均值。

# compute the deviation matrix
deviation <- function(X) {
  one <- rep(1, nrow(X))
  n <- ncol(X)
  d <- matrix(data = NA, nrow = nrow(X), ncol = ncol(X))
  for(i in seq.int(from = 1, to = n)) {
    d[,i] <- X[,i] - mean(X[,i], na.rm = TRUE) * one
  }
  d
}

这个函数可以用 R 更惯用地编写吗(也许使用函数式编程)?

【问题讨论】:

  • 谢谢,好收获!固定。

标签: r for-loop matrix functional-programming


【解决方案1】:

使用sweepcolMeans

sweep(mat, 2, colMeans(mat))

默认情况下,sweep 使用 - 或减法函数,从每列 (MARGIN=2) 中的值中获取由 colMeans 计算的列均值。给出相同的结果:

mat <- matrix(1:12,nrow=3)
deviation(mat)
#     [,1] [,2] [,3] [,4]
#[1,]   -1   -1   -1   -1
#[2,]    0    0    0    0
#[3,]    1    1    1    1

sweep(mat, 2, colMeans(mat))
#     [,1] [,2] [,3] [,4]
#[1,]   -1   -1   -1   -1
#[2,]    0    0    0    0
#[3,]    1    1    1    1

【讨论】:

  • mat-colMeans(mat)[col(mat)]
猜你喜欢
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多