这里我有一个5 * 4的矩阵(原来大得多)。我想计算矩阵每一行中每对唯一对的比率。计算矩阵中每一行唯一对的划分
X1 X2 X3 X4
10 8 2 1
4 4 3 6
2 10 8 1
1 2 1 10
3 5 5 4
我想实现与非重复分裂5 * 6矩阵,如下所示>
x1/x2 x1/x3 x1/x4 x2/x3 x2x4 x3/x4
1.25 5.00 10.00 4.00 8.00 2.00
1.00 1.33 0.67 1.33 0.67 0.50
0.20 0.25 2.00 1.25 10.00 8.00
0.50 1.00 0.10 2.00 0.20 0.10
0.60 0.60 0.75 1.00 1.25 1.25
现在我已经创建了我希望会做的伎俩一个功能,但是结果并不如预期。
set.seed(7)
test <- data.frame(replicate(4,sample(1:10,5,rep=TRUE)))
func_calcRatio <- function(theMatrix){
ratios <- outer(theMatrix, theMatrix, '/')
ratios <- ratios[upper.tri(ratios)]
return(ratios)
}
func_ratioMatrix <- function(theMatrix){
ratios_list <- list()
i = 1
l = length(theMatrix)
for (i in 1:l) {
vec <- numeric(l)
for (j in 1:l){
vec[j] <- i^j
}
myrow <- theMatrix[,1]
onerow <- func_calcRatio(myrow)
ratios_list[[i]] <- onerow
i = i+1
}
ratios_df <- do.call("rbind", ratios_list)
return(ratios_df)
}
test.ratios <- func_ratioMatrix(test)
要注意,从打印输出,这看起来很像一个数据框,而不是一个矩阵。这是R中的一个重要区别,因为这些不同的对象类型通常使用不同的解决方案。你可以使用'class(objectName)'在这个实例中告诉对象类型。 – lmo