2013-12-18 1 views
2

실행 결과로 3 차원 배열을 생성하는 함수가 있습니다. 함수가 여러 번 실행될 때 모든 개별 행렬을 저장해야합니다.배열에 대한 apply 또는 for 루프 사용 R

따라서 첫 번째 실행 중에 출력은 dim 10,20,30이라고 말한 배열입니다. 그런 다음 1 개의 희미한 부분에 1:10의 각 행렬을 저장하고 싶습니다. 그런 다음 함수가 다시 실행되어 새로운 배열 어둡기 10,20,30이 발생하고 루프 (또는 적용)가 다시 1:10을 순환하여 모든 행렬을 저장합니다. 처음에 for 루프에서 [[]]을 사용하여 인덱스를 만들려고 시도했지만 목록으로 저장되고 배열은 사용할 수 없게됩니다. 나는 완전한 해결책이 아니더라도 정말로 도움을 주실 것입니다. 난 그걸 어떻게 해야할지 모르겠다.

+0

목록 형식의 결과는 아마도 완벽하게 사용할 수 있지만 그 방법을 모를뿐입니다. 코드를 게시하고 원하는 것을 말하십시오. –

+0

원하는 것은 3D 배열의 각 3 차원에 대한 2D 매트릭스를 목록에 저장하는 것입니다. 나는. 'arr = array (1:21, c (2,2,3))'; 'arr'; 'apply (arr, 3, list)'? –

답변

0

abind 라이브러리에있는 abind 기능을 찾고 있다고 생각합니다. 적용을 결합하는 방법을 지정할 수 있는지 확실하지 않으므로 대신 foreach 패키지의 foreach을 사용합니다. 당신이 여러 번 실행하려는 경우와 포장 할 때

library(abind) 
library(foreach) 

# Helper function, we want to bind along the third dimension? 
abind3 <- function(...) { abind(along = 3, ...) } 

result <- foreach(i = 1:10, .combine=abind3) %do% { 
    # Generate each matrix here 
    matrix(i, 10, 10) 
} 

그런 다음, 목록에서 이들 각각을 저장할 수 있습니다 :

그래서이 세 차원 배열로 두 차원 행렬을 결합 할 수 있습니다 for 루프/lapply/foreach.

참고 forforeach에서의 구문 차이 첫째, i = 1:10 대신 i in 1:10, 두번째 %do%. foreach 루프를 중첩하는 경우 중요합니다.

foreach(i = 1:10) %:% 
    foreach(j = 1:10) %do% { 
    # do thing 
} 
+0

나는 이것을 분명히하지는 않았지만 이미 함수 출력으로 3dim 배열을 가지고 있다고 가정합니다. 이 함수는 20 번처럼 실행되고 각 실행에서 배열로 함수에 의해 출력 된 배열을 저장하려고합니다 (그리고 20 개의 시도 각각에 대해 별도로 배열을 구성하는 모든 행렬 (예 : 30 개)을 저장합니다. 내가 20 번 30 행렬로 끝나야합니다. – user3069326

+0

'lapply (1:20, yourFunction)'을 실행할 수 있어야합니다. 그러면 –

+0

문제는이 함수에서 요소를 가져 오는 것입니다. about) lapply (1:20 myfunc $ element)를 입력하면 Myfunc $ element가 함수, 문자 또는 기호가 아니라는 오류가 있습니다. – user3069326