假设您想基于条件构建一个简单的测试setdiff(input, 1:9)
。
我怎样才能构建一个
if isnotempty(setdiff(input, 1:9)) stop ("not valid")
输入时停止执行c(3, 12)
但输入时继续执行的语句c(2,5,7)
?非常感谢,伯蒂
假设您想基于条件构建一个简单的测试setdiff(input, 1:9)
。
我怎样才能构建一个
if isnotempty(setdiff(input, 1:9)) stop ("not valid")
输入时停止执行c(3, 12)
但输入时继续执行的语句c(2,5,7)
?非常感谢,伯蒂
你可以使用?length
:
isEmpty <- function(x) {
return(length(x)==0)
}
input <- c(3, 12);
if (!isEmpty(setdiff(input, 1:9))) {
stop ("not valid")
}
这是另一种选择identical(x, numeric(0))
。这是一个示例(基本上从 sgibb 中获取了所有内容并替换了关键行,因为我很懒):
isEmpty <- function(x) {
return(identical(x, numeric(0)))
}
input <- c(3, 12)
if (!isEmpty(setdiff(input, 1:9))) {
stop ("not valid")
}
我使用了以下功能:
# 1. Check if 'integer(0)'
is.integer0 <- function(x) {
is.integer(x) && length(x) == 0L
}
# 2. Check if 'numeric(0)'
is.numeric0 <- function(x) {
identical(x, numeric(0))
}
# 3. Check is 'integer0' or 'numeric0'
is.int_num_0 <- function(x) {
is.integer0(x) || is.numeric0(x)
}
希望它会有用。
这并不能回答您的主题行中的问题,但我认为这是您要实现的目标的更好方法:
if(!all(input %in% 1:9)) stop("not valid")
我喜欢 isEmpty 函数。我提出以下建议,以防万一您解析向量或列表:
isEmpty <- function(x) {
s<-sapply(x, function(y) length(y)==0, simplify = T)
return(s)
}