2015-01-14 3 views
3

각 배열에 숫자가있는 요소가 2 개 밖에없는 배열 목록이 있습니다. 모든 배열을 결합한 주어진 요소에 대해서만 하나의 번호가 있습니다.다차원 배열 병합

여기에 몇 가지 예제 데이터가 있습니다.

ar1=array(NA,dim=c(2,3,4)) 
ar1[1,1,1]=100 
ar2=array(NA,dim=c(2,3,4)) 
ar2[2,3,4]=200 
ar3=array(NA,dim=c(2,3,4)) 
ar3[2,1,4]=300 
ar=list(ar1,ar2,ar3) 

고마워요!

당신은 NA의 무시 어떤 벡터화 기능을 Reduce를 사용할 수
+0

명확히하기 위해 출력은 a 3 개의 비 NA 값을 갖는 희미한'c (2, 3, 4)'의 행렬? – flodel

+0

이 경우 예. 실제 경우에는 모든 값이 채워집니다. 기본적으로 NAs를 하나의 마스터 배열로 대체하려고합니다. – Dominik

답변

3

:

Reduce(function(x, y) ifelse(!is.na(x), x, y), ar) 

또 다른 예 :

library(functional) 
Reduce(Curry(pmax, na.rm = TRUE), ar) 
+0

와우. Reduce에 대해 들어 본 적도 없습니다. 감사! – Dominik

+0

사이드 코멘트로서, 위의 첫 번째 익명 함수가 기본 이진 연산자 중 하나가되기를 바랍니다. ifelse (! is.na (x), x, y)''% | % "<- function (x, y)'를 실행하여 만들 수 있습니다. 그런 다음'c (1, NA) % | % c (NA, 2)'와 같은 일을하십시오. – flodel

+0

@flodel - 다른 답변과 마찬가지로 보통 pmax (c (1, NA), c (NA, 2), na.rm = TRUE) 인 경우에만 'pmax'를 사용합니다. ' – thelatemail

5

PMAX는 na.rm 인수가 있고 함께 목록으로 아칸소 전달할 수를 do.call을 사용하는 pmax에 대한 그 논쟁과 함께 :

> do.call(pmax, c(ar, na.rm=TRUE)) 
, , 1 

    [,1] [,2] [,3] 
[1,] 100 NA NA 
[2,] NA NA NA 

, , 2 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 

, , 3 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] NA NA NA 

, , 4 

    [,1] [,2] [,3] 
[1,] NA NA NA 
[2,] 300 NA 200