2016-06-07 75 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