36

condition に基づいて簡単なテストを作成したいとしますsetdiff(input, 1:9)

どうすれば構築できますか

if isnotempty(setdiff(input, 1:9)) stop ("not valid") 

入力があると実行を停止するがc(3, 12)、入力があると続行するステートメントはc(2,5,7)? どうもありがとう、バーティ

4

5 に答える 5

51

使用できます?length

isEmpty <- function(x) {
    return(length(x)==0)
}

input <- c(3, 12);

if (!isEmpty(setdiff(input, 1:9))) {
    stop ("not valid")
}
于 2012-05-19T11:41:03.687 に答える
19

別のオプションがあります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")
}
于 2012-05-19T13:01:10.857 に答える
0

これはあなたの件名の質問に答えるものではありませんが、あなたが達成しようとしていることに対してより良いアプローチだと思います:

 if(!all(input %in% 1:9)) stop("not valid")
于 2012-05-19T18:20:29.920 に答える
0

isEmpty 関数が気に入りました。ベクトルまたはリストを解析する場合に備えて、次のことを提案します。

isEmpty <- function(x) {
s<-sapply(x, function(y) length(y)==0, simplify = T)
return(s)
}
于 2018-06-13T11:38:55.693 に答える