我在网格点有一个ID值的矩阵,我有一个包含其中一些ID的向量。我想编写一个函数,以便对于向量中包含的所有ID,矩阵中的相应ID设置为0.
例如:
ID <- matrix(c(2,3), nrow=2)
A <- matrix(c(0, 0, 2, 2, 0, 3,
1, 0, 0, 0, 0, 0,
0, 1, 0, 0, 0, 4,
1, 0, 1, 0, 0, 4), nrow=4, byrow=TRUE)
我想转换矩阵A,以便2和3变为0。
我找到了一种方法,用&#34; if&#34;功能,设定条件:
a <- nrow(A)
b <- ncol(A)
vide <- array(NaN, dim=c(a,b))
for (i in c(1:a)) {for (j in c(1:b)) {
if ( (A[i,j]==ID[1,1]) | (A[i,j]==ID[2,1]) ) {
vide[i,j]==0} else {vide[i,j]=A[i,j]}
}
}
vide[is.na(vide)] <- 0
但我想创建一个自动函数,它将对ID向量中包含的所有ID执行此操作,而不管行数。因为我将运行多年,ID矩阵不会总是具有相同的行数。有没有办法做到这一点?
我还尝试了另一种方法,让R在条件中写出条件,如果&#34;功能本身:
d <- nrow(ID)
Cond <- array(NaN, dim=c(d,1))
for (k in c(1:d)) {
Cond[k,1]=paste("(A[i,j]==ID[",k,",1]) ", sep="")
}
Cond <- t(Cond)
Cond <- paste(Cond,collapse="| ")
Cond <- noquote(Cond)
for (i in c(1:a)) {for (j in c(1:b)) {
if (Cond) {
vide[i,j]==0
} else {
vide[i,j]=A[i,j]
}
}
但问题是Cond是一个字符矩阵,我收到错误消息&#34;参数不能解释为逻辑&#34;。
我是R的初学者,所以也许有一种更简单的方法可以做我想做的事情?我尝试在互联网上搜索,但似乎从来没有找到适合我的情况。谢谢你的帮助!
答案 0 :(得分:3)
这是怎么回事?诀窍是处理矩阵是一个向量。 R将动态处理第二个维度。我在下面执行的操作是查找来自A
的{{1}}个元素的位置,并用零覆盖它们。
ID