我还是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)
}
然而,虽然简单的测试用例现在按照建议工作,但这个复杂的情况不起作用。 有什么建议吗? 感谢。
答案 0 :(得分:0)
如果您想在矩阵中添加20,则只需:
test <- test + 20
但是,假设您需要将此功能用于其他目的;问题是由于两个原因:
colnames
和rownames
为NULL,因此您的函数不会迭代。然后,以下代码将起作用:
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)