在matix上使用apply时,无法动态修改R中子程序中的外部变量?

在matix上使用apply时,无法动态修改R中子程序中的外部变量?,r,variables,apply,dynamically-generated,R,Variables,Apply,Dynamically Generated,这个问题已经困扰了我好几天了。假设我有两个矩阵: matrix_a <- matrix(0, nrow = 3, ncol = 3, dimnames = list(c("r1", "r2", "r3"), c("c1", "c2", "c3"))) matrix_b <- matrix(c("r1", "r2", "c1", "c2"), nrow = 2, ncol = 2) 但是,该代码似乎根本无法更改矩阵a。但是我的矩阵a的预期结果应

这个问题已经困扰了我好几天了。假设我有两个矩阵:

matrix_a <- matrix(0, nrow = 3, ncol = 3, 
                   dimnames = list(c("r1", "r2", "r3"), c("c1", "c2", "c3")))
matrix_b <- matrix(c("r1", "r2", "c1", "c2"), nrow = 2, ncol = 2)
但是,该代码似乎根本无法更改
矩阵a
。但是我的
矩阵a
的预期结果应该是

   c1 c2 c3
r1  1  0  0
r2  0  2  0
r3  0  0  0

我们如何实现动态修改
矩阵a
的目标?请为我提供一个非for循环解决方案。提前谢谢

如您所知,
如您所知,
函数参数是按值传递的,这就是为什么原始的
矩阵a
没有被更改的原因。另外,
apply
可能不会比编写良好的for循环快。我想我现在已经找到了正确的答案。@Joshua使用
如何得到
2
?您的
change\u var
功能仅将
1
分配给单元格?您的意思是增加单元格值吗?函数参数是按值传递的,这就是为什么没有更改原始的
矩阵a
。另外,
apply
可能不会比编写良好的for循环快。我想我现在已经找到了正确的答案。@Joshua使用
如何得到
2
?您的
change\u var
功能仅将
1
分配给单元格?你的意思是增加单元格值吗?
   c1 c2 c3
r1  1  0  0
r2  0  2  0
r3  0  0  0
matrix_a <- matrix(0, nrow = 3, ncol = 3, 
                   dimnames = list(c("r1", "r2", "r3"), c("c1", "c2", "c3")))
matrix_b <- matrix(c("r1", "r2", "r2", "c1", "c2", "c2"), nrow = 3, ncol = 2)
# Convert matrix_b from 2-d to 1-d indices
row <- match(matrix_b[,1], rownames(matrix_a))
col <- match(matrix_b[,2], colnames(matrix_a))
idx <- row+(col-1)*nrow(matrix_a)
# Then count the number of identical indices using table
matrix_a[sort(unique(idx))] <- table(idx)
   c1 c2 c3
r1  1  0  0
r2  0  2  0
r3  0  0  0
row <- match(matrix_b[,1], rownames(matrix_a))
col <- match(matrix_b[,2], colnames(matrix_a))
idx <- row+(col-1)*nrow(matrix_a)
matrix_a[idx] <- 1