如何从R中的函数更改原始矩阵中的值?

时间:2014-06-21 05:59:35

标签: r function matrix

我尝试了以下代码:

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

矩阵的值在函数中发生变化,但原始矩阵没有变化。如何在函数内更改原始矩阵?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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