2014-04-25 4 views
1

일반 매트릭스는 2 차원 매트릭스입니다. 하지만, 초기화 할 수 있습니다 :다차원 배열에 적용 적용

a<-array(0,dim=c(2,3,4,5)) 

2 * 4 * 5 * 3 행렬 또는 배열입니다.

명령

apply(a,c(2,3),sum) 

는 4 * 5 어레이를 제공은 1, 4 차원의 요소의 합을 포함한다.

왜 그런가요? 내가 아는 한, apply 함수에서 1은 행을 나타내며 2는 열을 나타냅니다. 그러나 3은 무엇을 의미합니까?

여기에 몇 가지 추상화가 필요합니다.

+0

1 : n은 행으로 시작하는 적용되는 치수입니다. –

답변

4

배열에서 apply을 이해하는 가장 쉬운 방법은 몇 가지 예를 시도하는 것입니다. 여기에 마지막 예에서 수정 된 일부 데이터가 in the documentation 객체입니다 : 여기에 무슨

> z <- array(1:24, dim = 2:4) 
> dim(z) 
[1] 2 3 4 

> apply(z, 1, function(x) sum(x)) 
[1] 144 156 
> apply(z, 2, function(x) sum(x)) 
[1] 84 100 116 
> apply(z, 3, function(x) sum(x)) 
[1] 21 57 93 129 

? 자, 우리는 3 차원 배열 z을 만듭니다. MARGIN=1과 함께 apply을 사용하면 두 행이 있기 때문에 두 개의 값이있는 행 합계를 얻게됩니다. MARGIN=2을 사용하면 세 개의 열이 있기 때문에 세 개의 값을 얻을 수 있으며 MARGIN=3을 사용하면 배열의 세 번째 행에서 합계를 얻을 수 있습니다 차원 (배열의 세 번째 차원에 네 개의 수준이 있으므로 네 개의 값).

MARGIN에 대한 벡터를 지정하면 c(2,3)과 같이 세 번째 차원의 각 열과 수준에 대한 행의 합계를 얻습니다. 상기 예에서, apply에서 MARGIN=1와 결과가 로우 합이 얼마나 참고 MARGIN=2와 열 합은 각각 아래의 결과에서 볼 수있는 매트릭스 :

> apply(z, c(2,3), function(x) sum(x)) 
    [,1] [,2] [,3] [,4] 
[1,] 3 15 27 39 
[2,] 7 19 31 43 
[3,] 11 23 35 47 

하면이 측정 기준 모두를 지정하면 MARGIN=c(1,2,3) 단순히 원래의 세 가지 차원 객체를 얻을 : 여기 배울 수

> all.equal(z, apply(z, c(1,2,3), function(x) sum(x))) 
[1] TRUE 

가장 좋은 방법은 그냥 진짜 행렬 주변에 재생을 시작하는 것입니다. 모든 배열 항목이 0이므로 예제 데이터는 합계를 보는 데 도움이되지 않습니다.

+0

"MARGIN에 벡터를 지정하는 경우 c (2,3)와 같이 세 번째 차원의 각 열과 수준에 대한 행의 합계를 구합니다."라는 의미를 얻지 못했습니다. – GeekCat

+1

@GeekCat 행간 또는 열간의 한계 합계를 계산할 때 두 차원 모두에서 배열의 한계 합계를 계산합니다 (실제로 'c (2,3)'는 실제로 열이고 배열의 세 번째 차원이지만 잘하면이 점을 알 수 있습니다). 말로 표현하는 것이 어렵다고 생각합니다. 그래서 몇 가지 예를 들으면 정말 도움이됩니다. – Thomas