2014-06-21 5 views
0

나는 다음 코드를 시도 :R의 함수에서 원래 행렬의 값을 변경하는 방법?

matrix1 = array(NA, c(3,4)) 
matrix2 = array(NA, c(3,4)) 

myfn = function(mat1, mat2){ 
    for(x in 1:4) { 
     mat1[2,x] = 5 
     mat2[2,x] = 6 
    } 
    cat("MATRICES INSIDE FUNCTION: \n") 
    print(mat1) 
    print(mat2) 
} 

myfn(matrix1,matrix2) 

matrix1 
matrix2 

행렬의 값이 함수에 변경하지만 원래의 행렬이 변경되지 않습니다. 함수 내에서 원래의 행렬을 어떻게 바꿀 수 있습니까?

답변

0

당신은 시도 할 수 있습니다 :

myfn <- function(mat1, mat2, Ncol, rowIndex) { 
vars <- sapply(substitute(list(mat1, mat2)), deparse)[-1] 
mat1[rowIndex, 1:Ncol] <- 5 
mat2[rowIndex, 1:Ncol] <- 6  
lst <- setNames(list(mat1, mat2), vars) 
list2env(lst, envir = .GlobalEnv) 
} 

myfn(matrix1, matrix2, 4, 2) 
#<environment: R_GlobalEnv> 


matrix1 
    [,1] [,2] [,3] [,4] 
[1,] NA NA NA NA 
[2,] 5 5 5 5 
[3,] NA NA NA NA 
matrix2 
    [,1] [,2] [,3] [,4] 
[1,] NA NA NA NA 
[2,] 6 6 6 6 
[3,] NA NA NA NA 
+0

감사합니다. 이것은 내가 원하는 것입니다. – rnso

1

하나의 행렬에 대해이를 대답 할 수 있습니다. 다음 코드를 시도해보십시오.

matrix1 = array(NA, c(3,4)) 

myfn = function(mat1){ 
    for(x in 1:4) { 
     mat1[2,x] = 5 
    } 
    return(mat1) 
} 

그런 다음 다른 행렬에 동일한 기능을 적용 할 경우,

matrix1 <- myfn(matrix1) 

같은 함수를 호출 목록에 보관하고 lappy를 사용합니다.

List_of_matrices <- lappy(List_of_matrices,myfn) 
+0

감사합니다. 그러나 전역 변수를 변경하는 방법을 알고 싶었습니다. – rnso

관련 문제