使用R中的已定义函数更改矩阵中的值

时间:2016-04-06 19:20:19

标签: r matrix

我还是R的新手 我想知道如何使用自定义函数来更改矩阵中的元素。 说,我有一个矩阵“测试”
test = matrix(c(1:9), 3, 3)
我写了一个函数“testFunction”来将每个元素添加20。

testFunction = function(){
  for(i in rownames(test)){
    for(j in colnames(test)){
      test[i,j] = test[i,j] + 20
    }
  }
}

如果我手动执行此操作,例如test[1,1] = test[1,1] + 20,则可以 但如果我使用我写的函数,矩阵保持不变。 运行“testFunction”后的“test”矩阵仍然是

         [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

有谁知道为什么?如何使用函数更改矩阵中的值? 感谢。

更新
所以,实际上我正在创建一个452 * 452矩阵“pairMatrix”和一个函数“countPair”

pairMatrix = matrix(0, 452,452)
rownames(pairMatrix) = players
colnames(pairMatrix) = players

和 我将数据帧传递给函数,函数将遍历每一行以找到“Player1”和“Player2”。然后,使用这两个值作为行名称和列名称来查找pairMatrix中的元素并添加1。

countPair = function(someDataFrame, pairMatrix){
  for (i in rownames(someDataFrame)){
    w = someDataFrame[i,"Player1"]
    l = someDataFrame[i,"Player2"]
    pairMatrix[w,l] = pairMatrix[w,l] + 1
    pairMatrix[l,w] = pairMatrix[l,w] + 1
  }
  return(pairMatrix)
}

然而,虽然简单的测试用例现在按照建议工作,但这个复杂的情况不起作用。 有什么建议吗? 感谢。

1 个答案:

答案 0 :(得分:0)

如果您想在矩阵中添加20,则只需:

test <- test + 20

但是,假设您需要将此功能用于其他目的;问题是由于两个原因:

    对于矩阵,
  1. colnamesrownames为NULL,因此您的函数不会迭代。
  2. 在您的功能中,您必须返回功能的输出。
  3. 然后,以下代码将起作用:

    test <- matrix(c(1:9), 3, 3)
    
    testFunction <- function(){
      for(i in 1:dim(test)[1]){
        for(j in 1:dim(test)[2]){
          test[i,j] <- test[i,j] + 20
        }
      }
      return(test)
    }
    
    test <- testFunction()
    

    虽然前面的代码工作,但仍然不好,因为函数的想法是接受输入,处理它并返回和输出。以下代码表明:

    test <- matrix(c(1:9), 3, 3)
    testFunction = function(input){
      for(i in 1:dim(input)[1]){
        for(j in 1:dim(input)[2]){
          input[i,j] <- input[i,j] + 20
        }
      }
      return(input)
    }
    test_added <- testFunction(test)