在R中创建特殊矩阵

时间:2014-06-15 04:34:26

标签: r

我有一个矩阵如下。

dat = matrix(c(0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 2, 3, 4, 5, 6), ncol=4)
colnames(dat)=c("m1","m2","m3","m4")
dat
m1 m2 m3 m4
1  0  1  0  2
2  0  0  0  3
3  1  1  0  4
4  1  1  1  5
5  1  1  1  6

我想创建四个矩阵(5 * 4),每个矩阵列通过自身相乘得到,然后每对行值res1 =(m1 * m1,m1 * m2,m1 * m3,m1 * m4), res2 =(m1 * m2,m2 * m2,m2 * m3,m2 * m4),res3 =(mm1 * m3,m2 * m3,m3 * m3,m4 * m3),res4 =(m1 * m4,m2 * m4) ,m3 * m4,m4 * m4)如

res1
1  0  0  0  0
2  0  0  0  0
3  1  1  0  4
4  1  1  1  5
5  1  1  1  6
res2
1  1 1  0  2
2  0  0 0  0
3  1  1 0  4
4  1  1 1  5
5  1  1 1  6
res3
1  0  0 0 0
2  0  0 0 0
3  0  0 0 0
4  1  1 1 5
5  1  1 1 6
res4
1  0  2  0 4
2  0  0  0  9
3  4  4  0 16
4  5  5  5  25
5  6  6  6  36

如何在R中有效地进行?

2 个答案:

答案 0 :(得分:1)

运行

res <- lapply(1:ncol(dat), function(i) dat * dat[,i])
由于元素倍增的再循环,

将起作用。如果乘以一列,这些值将在整个矩阵上重复。并且lapply会将它们全部返回到列表中。您可以将其res[[1]]res[[2]]等单独列出。

答案 1 :(得分:0)

test<-NULL

for (i in 1:ncol(dat)){
 x<-dat*dat[,i]
test[i]<-list(x) 
}

与@ Mrflick的评论相同

test[[2]]
     m1 m2 m3 m4
[1,]  0  1  0  2
[2,]  0  0  0  0
[3,]  1  1  0  4
[4,]  1  1  1  5
[5,]  1  1  1  6