2017-09-15 90 views
0

我有一個包含R中相同大小的矩陣的列表。我想對所有矩陣的相同元素應用函數。例如:如何在R中的列表中的所有元素的每個元素上應用函數R

> a <- matrix(1:4, ncol = 2) 
> b <- matrix(5:8, ncol = 2) 
> c <- list(a,b) 
> c 
[[1]] 
    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

[[2]] 
    [,1] [,2] 
[1,] 5 7 
[2,] 6 8 

現在我想申請均值功能,並希望得到這樣一個矩陣:

 [,1] [,2] 
[1,] 3 5 
[2,] 4 6 
+0

在這個簡單的例子中,你可以試試'd =(a + b)/ 2',它會返回所需的矩陣。 –

回答

5

了一個新概念的方式做這將是總結矩陣,然後取每個條目的平均值。嘗試使用Reduce

Reduce('+', c)/length(c) 

輸出:

 [,1] [,2] 
[1,] 3 5 
[2,] 4 6 

演示這裏:

Rextester

+0

謝謝,作品太棒了! –

0

另一個選項是構建的陣列,然後使用apply

第1步:構建數組。
使用abind庫和do.call,可以做到這一點:

library(abind) 
myArray <- do.call(function(...) abind(..., along=3), c) 

使用基R,可以去掉該結構,然後重建它是這樣的:

myArray <- array(unlist(c), dim=c(dim(a), length(c))) 

在這兩種情況下,這些返回期望陣列

, , 1 

    [,1] [,2] 
[1,] 1 3 
[2,] 2 4 

, , 2 

    [,1] [,2] 
[1,] 5 7 
[2,] 6 8 

步驟2 :使用apply來計算沿着第一和第二維的平均值。

apply(myArray, 1:2, mean) 
    [,1] [,2] 
[1,] 3 5 
[2,] 4 6 

這將是比Reduce更靈活,因爲你可以換出更多的功能,但它會爲這個特定的應用慢。

相關問題