2016-06-07 77 views
1

我正在处理一些列表和矩阵,并且我遇到了一些问题以正确处理数据。比方说,我定义下列矩阵和列表(就像一个例子):避免循环和乘以矩阵元素列表

m1 <-array(rexp(5),dim=c(3,3,3)) 
mn <-apply(m1,1:2,mean) 
ms <-apply(m1,1:2,sum) 
msqr <-apply(ms,1:2,sqrt) 
list1 <- list(mn,ms) 
list2 <- list(ms,msqr) 

然后,我想从。减去M1 MN(具有不同尺寸),但是避免loops..I的意思是,到目前为止, ,我在做类似:

dif <- array(NA,dim=c(3,3,3)) 
     for(i in 1:3){ 
     for(j in 1:3){ 
     dif[i,j,]<- m1[i,j,]-mn[i,j] 
     } 
     } 

在另一方面,我要乘两个列表:列表1和列表2(逐个元素),再弄一个,项目list3与相同数量的元素。 我试着用sapply ..但是我做得不好..我想我可以用这两个例子的一些函数(mapply或sapply),但我看不出如何......任何建议?

谢谢!

+1

'地图( '*',列表1,列表2)'关于第二个问题 – Sotos

回答

2

在第一部分中,我们可以复制“MN”值来创建相同的尺寸“M1”的array然后执行的elementwise减法

dif1 <- m1-array(rep(mn, dim(m1)[3]), dim(m1)) 
identical(dif, dif1) 
#[1] TRUE 

并且对于第二壳体,mapply可用于在两个list s的相应元素之间进行乘法运算。

mapply(`*`, list1, list2, SIMPLIFY = FALSE) 

或者我们unlistlist S,做*然后

relist(unlist(list1) * unlist(list2), skeleton = list1) 
+1

太好了!那工作relist,我就像避免循环的第一种方式一样,非常感谢。 – user3231352