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

Yue*_*e Y 1 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...
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*man 5

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

is.null(mat) || nrow(mat) < n
Run Code Online (Sandbox Code Playgroud)

从帮助:

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