2017-09-15 2 views
0

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보다 더 유연 것이다, 그러나이 특정 응용 프로그램의 속도가 느려집니다.

관련 문제