用相应的行和填充矩阵的所有单元格

时间:2013-11-17 11:18:27

标签: r

我正在尝试为一个看似相当简单的任务找到一个矢量化解决方案:用相应行的行和填充矩阵的所有单元格,例如:

mymat = matrix(c(80, 15, 10, 60, 30, 5), nrow=2, byrow=TRUE)
mm_rowsums = rowSums(mymat)

output = matrix(nrow=nrow(mymat), ncol=ncol(mymat))
for (row_num in 1:nrow(mymat)) {
  output[row_num, ] = mm_rowsums[row_num]
}

期望的结果:

> output
     [,1] [,2] [,3]
[1,]  105  105  105
[2,]   95   95   95

我对各种apply函数的了解虽然让我失望,但我无法看到如何以矢量化的方式按行填充。

为了增加一些现实世界的背景,我正在尝试计算我正在进行的统计课程的卡方式独立测试的各个步骤。

3 个答案:

答案 0 :(得分:2)

这是一个选项:

> output[,] <- mm_rowsums # this part does the same as your `for` loop
> output
     [,1] [,2] [,3]
[1,]  105  105  105
[2,]   95   95   95

答案 1 :(得分:1)

也许你可以使用replicate

replicate(ncol(mymat), mm_rowsums)
#      [,1] [,2] [,3]
# [1,]  105  105  105
# [2,]   95   95   95

## Or, without creating "mm_rowsums"
replicate(ncol(mymat), rowSums(mymat))

答案 2 :(得分:1)

显然我不会这样做,但是因为你似乎在努力使用apply的方法

  

“我对各种应用函数的了解虽然让我失望,但我无法看到如何以矢量化方式按行填充”

我认为这对你有用:

t(apply(mymat, 1, function(x){ ifelse(x != sum(x), sum(x), x) } ))

#     [,1] [,2] [,3]
#[1,]  105  105  105
#[2,]   95   95   95