在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