在R中重复一个简单的矩阵算法? [英] Repeating a simple algorithm for matrices in R?
问题描述
我试图通过创建第一部分来避免重复一些简单的计算。但是我想知道为什么我不能获得与第二部分计算结果相同的结果(第二部分给出了正确答案)?
第一部分:
a =矩阵(c(8,11,2,6,8) (a)
mc = colMeans(a)
nc = ncol(a)
mc =
mr = rowMeans(a)
gr = mean(a)
(m =矩阵(c(a [rep(1:nr,nr) nc,each = nc)] - mr [rep(1:nr,nr)] -
mc [rep(1:nc,each = nc)] + gr),nrow = nr,ncol = nc)) ##这是不正确的答案!
第二部分:
a11 <-a [1,1] -mr [1] -mc [1] + gr
a21 <-a [2,1] - mr [2] -mc [1] + gr
a31 <-a [3,1] -mr [3] -mc [1] + gr
a12 <-a [1,2 ] mr [1] -mc [2] + gr
a22 <-a [2,2] -mr [2] -mc [2] + gr
a32 <-a [3 ,2] - mr [3] -mc [2] + gr
a13 <-a [1,3] -mr [1] -mc [3] + gr
a23 <-a [2,3] - mr [2] -mc [3] + gr
a33 <-a [3,3] -mr [3] -mc [3] + gr
a14< - a [1,4] - mr [1] - mc [4] + gr
a24 < - a [2,4] - mr [2] - mc [4] + gr
a34 < - a [3,4] - mr [3] - mc [4] + gr
g = paste0(a,rep(1:3,3) ,每个= 3))
(m =矩阵(c(mget(g)),nr = 3,ncol = 4))##这是正确的答案!
您可以使用 / code>来计算差异:
$ $ $ $ $ $ $ myMat < - a - outer(mr,mc,+ )+ gr
myMat
[,1] [,2] [,3] [,4]
[1,] 2 1 0 -3
[ 2,] 2 0 -2 0
[3,] -4 -1 2 3
重建m,使它不是一个列表
$ b $ pre $ m $ m = matrix(unlist(mget(g)),nr = 3, ncol = 4)
现在,检查它们是否一致:
相同(m,myMat)
[1] TRUE
I'm trying to avoid repeating some simple calculations by creating the first part. But I'm wondering why I don't obtain the same result as calculated by the second part (second part gives the correct answer)?
First part:
a = matrix(c(8,11,2, 6,8,4, 4,5,6, 2,8,8), nrow = 3)
nr = nrow(a)
nc = ncol(a)
mc = colMeans(a)
mr = rowMeans(a)
gr = mean(a)
(m = matrix(c(a[rep(1:nr, nr), rep(1:nc, each = nc)] - mr[rep(1:nr, nr)] -
mc[rep(1:nc, each = nc)] + gr), nrow = nr, ncol = nc)) ## This is NOT correct answer !!
Second part:
a11 <- a[1, 1] - mr[1] - mc[1] + gr
a21 <- a[2, 1] - mr[2] - mc[1] + gr
a31 <- a[3, 1] - mr[3] - mc[1] + gr
a12 <- a[1, 2] - mr[1] - mc[2] + gr
a22 <- a[2, 2] - mr[2] - mc[2] + gr
a32 <- a[3, 2] - mr[3] - mc[2] + gr
a13 <- a[1, 3] - mr[1] - mc[3] + gr
a23 <- a[2, 3] - mr[2] - mc[3] + gr
a33 <- a[3, 3] - mr[3] - mc[3] + gr
a14 <- a[1, 4] - mr[1] - mc[4] + gr
a24 <- a[2, 4] - mr[2] - mc[4] + gr
a34 <- a[3, 4] - mr[3] - mc[4] + gr
g = paste0("a", rep(1:3, 3), rep(1:4, each = 3))
(m = matrix(c(mget(g)), nr = 3, ncol = 4)) ## This is the correct answer !!
You can use outer
to calculate the differences:
myMat <- a - outer(mr, mc, "+") + gr
myMat
[,1] [,2] [,3] [,4]
[1,] 2 1 0 -3
[2,] 2 0 -2 0
[3,] -4 -1 2 3
rebuild m so that it is not a list
m = matrix(unlist(mget(g)), nr = 3, ncol = 4)
Now, check that they are identical:
identical(m, myMat)
[1] TRUE
这篇关于在R中重复一个简单的矩阵算法?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!