我有一个变量mat
,其初始为NULL
。我有一个迭代过程,只在某些条件下填充。在此过程之后,我检查mat
是否有超过一定数量的行,如果没有,则执行其他操作。
我正在寻找一种干净的方式来写这个条件,理想情况下,像is.null(mat) | nrow(mat) < n
。虽然如果is.null(mat)
为TRUE
并且它们通过OR连接,则整个语句应为TRUE
,但nrow(mat) < n
会出错。
我可以通过将其重写为两个条件并将# do something
代码复制到两个位置来解决这个问题,但有更简洁的方法吗?
mat = NULL
for(i in 1:10){
if(runif(1) > 0.8){
mat = rbind(mat, c(1,2,3))
}
}
if(is.null(mat)){
# do something...
} else if(nrow(mat) < 3){
# do something...
}
答案 0 :(得分:4)
您可以使用|
的短路版本,即||
。
is.null(mat) || nrow(mat) < n
来自帮助:
&安培;和&amp;&amp;表示逻辑AND和|和||表示逻辑OR。较短的形式以与算术运算符大致相同的方式执行元素比较。较长的形式从左到右评估仅检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流程,通常在if子句中是首选。