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)
您可以使用 的短路版本|,即||。
is.null(mat) || nrow(mat) < n
Run Code Online (Sandbox Code Playgroud)
从帮助:
& 和 && 表示逻辑 AND 和 | 和 || 表示逻辑或。较短的形式以与算术运算符大致相同的方式执行元素比较。较长的形式从左到右求值,仅检查每个向量的第一个元素。评估仅在结果确定之前进行。较长的形式适用于编程控制流,通常首选在 if 子句中。