在r中操作矩阵的函数

时间:2014-10-06 05:04:24

标签: r matrix

我有m <- a 100*6 matrix。我想返回6*6 matrix6*6 matrix的条目(i,j)包含以下值:

(mean(col.i)-mean(col.j))/sd(col.i and col.j)

其中sd(col.i和col.j)是col.i and col.j

的所有值的标准差

我想使用apply函数来执行此操作,但我不知道如何组合矩阵m的每两列。那么我怎样才能获得6 * 6矩阵?我应该使用什么功能?(在r中)

2 个答案:

答案 0 :(得分:2)

您可以通过i,j创建expand.grid索引的所有组合,然后使用mapply获取矩阵的任何元素。像这样:

    #generate a sample matrix
    m<-matrix(runif(600),ncol=6)
    #generate the indices
    indices<-expand.grid(1:6,1:6)
    #the result
    res<-matrix(mapply(function (x,y) (mean(m[,x])-mean(m[,y]))/sd(m[,c(x,y)]),indices[[1]],indices[[2]]),ncol=6)

答案 1 :(得分:-1)

如果您没有使用平台/语言的任何细节,我可以提供以下一般性建议: 1.找到每列中元素的方法。 2.找到每列中元素的平方和。 然后,您可以使用https://en.wikipedia.org/wiki/Standard_deviation#Identities_and_mathematical_properties处给出的公式来获得所需的标准偏差。公式是:

标准差= sqrt(1 / N *(平方和) - (平均值的平方))