2014-11-12 5 views
0

여러 행렬의 열을 for 루프에 전달하려고합니다.행렬의 각 행렬의 개별 열을 변수로 전달

mat1 = matrix(rep(1:25), 5,5) 
mat2 = matrix(rep(26:50), 5,5) 
array.mat = array(c(mat1,mat2), dim=c(5,5,2)) 
mat1.ncol = ncol(mat1) 
mat2.ncol = ncol(mat2) 
mat.ncol = c(mat1.ncol, mat2.ncol) 
mat.ncol 
array.mat 
for (dimi in 1:2){ 
    dim.col = mat.ncol[dimi] 
    for (coli in 1:dim.col){ 
     st = shapiro.test(array.mat[,coli,dimi])$p.value 
     if(st > .001){ 
      array.mat[,coli,dimi] = log(array.mat[,coli,dimi]) 
}}} 

을하지만, 내 데이터는 같은 수의 열이없는, 그래서 사용하고 싶습니다 : 내 두 행렬은 동일한 수의 열이 있다면

, 나는 이런 식으로 뭔가를 할 수 대신 행렬의 목록.

mat1 = matrix(rep(1:10), 5,2) 
mat2 = matrix(rep(26:50), 5,5) 
list.mat=list(a=mat1, b=mat2) 
list.mat 

하지만 행렬의 열을 전달하는 방법을 알 수 없습니까?

list.mat$a[1:5] 

은 첫 번째 행렬의 첫 번째 열을 제공하지만 루프에서 $ a와 [startindex : endindex]를 어떻게 전달합니까? 내가 보는 다른 모든 답변은 의 i 번째 요소 (예 : 열)를 모두 전달하는 경향이 있습니다 ( 행렬). 두 개의 행렬 (a와 b)를 나중의 계산을 위해 분리 해 둘 필요가 있습니다. 그러나이 두 가지 행렬에 대한 두 행렬의 목록을 함께 사용하기를 원합니다. 또 다시, 나는 아마 이것을 잘못 생각하고있을 것이다. 어떤 생각을 해줘서 고마워.

답변

0

숫자 색인을 사용할 수 있습니까? 예를 들어, 매트릭스 1 열에 1 : 루프 list.mat[[1]][,1]

:

for (m in 1:2) { 
    for (i in 1:ncol(list.mat[[m]])) { 
    cat('Here is matrix', m, ', columnn', i, '\n') 
    print(list.mat[[m]][,i]) 
    } 
} 

결과 :

Here is matrix 1 , columnn 1 
[1] 1 2 3 4 5 
Here is matrix 1 , columnn 2 
[1] 6 7 8 9 10 
Here is matrix 2 , columnn 1 
[1] 26 27 28 29 30 
Here is matrix 2 , columnn 2 
[1] 31 32 33 34 35 
Here is matrix 2 , columnn 3 
[1] 36 37 38 39 40 
Here is matrix 2 , columnn 4 
[1] 41 42 43 44 45 
Here is matrix 2 , columnn 5 
[1] 46 47 48 49 50 
+0

오이! 고맙습니다. 간단한 대답. 가능한 모든 조합의 구문을 시도하고 잘못된 오류 수를 계속 유지해야합니다. 3 개의 텍스트 또는 많은 웹 검색에서이 답변을 찾을 수 없습니다. 고맙습니다! – user7964

+0

도와 드리겠습니다! 목록 색인 생성은 약간 이상합니다. 'my_list [1]'은 길이가 1 인리스트이다. my_list [[1]]는리스트의 위치 1에있는 것이 든든된다. – arvi1000

관련 문제