我已经看到使用ifelse处理向量的解决方案。我有更多细节需要在我的案例中解决。虽然我正在努力找出不同的方法来处理它,通过声明yes和no条件的函数并在ifelse中使用它或尝试使用嵌套的ifelse循环,我不知道我错过了什么,因为我没有得到我需要的结果。所以我带来了所有的R专家。感谢您抽出宝贵时间帮助我。
我的输入数据
two.mz=57
two.rt=16
x.mz
0 57 0 0 0
2 0 0.00000 0 0 0
3 0 0.00000 0 0 0
4 0 0.00000 0 0 0
5 0 0.00000 0 0 0
6 0 0.00000 0 0 0
7 0 0.00000 0 0 0
8 0 0.00000 0 0 0
9 0 0.00000 0 0 0
y.rt
0 16 0 0 0
2 0 0.00000 0 0 0
3 0 0.00000 0 0 0
4 0 0.00000 0 0 0
5 0 0.00000 0 0 0
6 0 0.00000 0 0 0
7 0 0.00000 0 0 0
8 0 0.00000 0 0 0
9 0 0.00000 0 0 0
mz.test
2 TRUE
3 FALSE
4 FALSE
5 FALSE
6 FALSE
7 FALSE
8 FALSE
9 FALSE
10 FALSE
rt.test也是一个逻辑矩阵。 mz.test和rt.test将具有相同的维度。
我需要检查一个简单的条件:如果mz.test是T并且rt.test在相应的行中也是T,则执行一组操作。如果它们在两个矩阵 *中的所有相应行中都不是 * 都为TRUE ,则在主矩阵中插入一行值。我使用此函数进行插入:
insert.under.row.number <- function (mat, rnum, what)
{
if (length(what) != ncol(mat)) what <- c(0,what, rep_len(NA, ncol(mat) - length(what)))
rbind(mat[1:(rnum-1), ], what,mat[(rnum + 1):nrow(mat), ])
}
我也从这个网站获得了这部分的帮助。 :)
我的代码段:
if (mz.test==T & rt.test==T)
{
count=count+1
x.mz[j,2]=two.mz ##x.mz is a main matrix ###two.mz and two.rt are single numeric values
y.rt[j,2]=two.rt ##y.rt is another main matrix
} else {
count1=count1+1
newrow.m=two.mz
newrow.r=two.rt
x.mz <- insert.under.row.number(x.mz, j,newrow.m)
row.names(x.mz) <- 1:nrow(x.mz1)
y.rt <- insert.under.row.number(y.rt, j,newrow.r)
row.names(y.rt) <- 1:nrow(y.rt1)
print(count1)
}
我在这里展示了if()因为我没有为ifelse()获得正确的结构。任何人都可以帮我解决我的错误吗?非常感谢!