R:如果语句包含is.null作为OR连接的条件之一

时间:2017-12-01 02:34:58

标签: r logical-operators

我有一个变量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...
}

1 个答案:

答案 0 :(得分:4)

您可以使用|的短路版本,即||

is.null(mat) || nrow(mat) < n

来自帮助:

  

&安培;和&amp;&amp;表示逻辑AND和|和||表示逻辑OR。较短的形式以与算术运算符大致相同的方式执行元素比较。较长的形式从左到右评估仅检查每个向量的第一个元素。评估仅在确定结果之前进行。较长的形式适用于编程控制流程,通常在if子句中是首选。