【问题标题】:How to change values in original matrices from a function in R?如何从 R 中的函数更改原始矩阵中的值?
【发布时间】:2014-06-21 05:59:35
【问题描述】:

我尝试了以下代码:

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

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

【问题讨论】:

    标签: r function matrix


    【解决方案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)
    

    【讨论】:

    • 谢谢。但我想知道一种改变全局变量的方法。
    【解决方案2】:

    你可以试试:

    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
    

    【讨论】:

    • 谢谢。这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2018-04-24
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多