[英]Creating special matrix in 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中有效地做到这一点?
运行
res <- lapply(1:ncol(dat), function(i) dat * dat[,i])
由于元素级乘法的回收,将可以工作。 如果乘以一列,这些值将在整个矩阵上重复。 lapply
会将它们全部返回到列表中。 您可以将它们分别作为res[[1]]
, res[[2]]
等获取。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.