0

長さが異なる変数 b があります。

例えば。かもね

b=0 or b=c(1,4,5)

if 条件があります。

b=0 then it should do something.

b が 0 でないか、長さが 1 より大きい場合は常に、次の警告が表示されます。

the condition has length > 1 and only the first element will be used

基本的に私がしたいのは、 b=0 の場合は何かをし、そうでない場合はベクトルの長さに関係なく何かをすることです。

これを適切に行うにはどうすればよいですか?

4

2 に答える 2

6

同一、任意、およびすべてを使用する代替ソリューションがあります。

あなたの説明から、私は3つのシナリオを推測しますが、実際にどれが必要になるかはわかりません:

  1. の場合にのみ何かを行いb==0ます。もしそうb!=0なら、length(b)>1それをしないでください。 TRUEそれだけにb <- 0

    if (isTRUE(identical(b, 0))) {
      # do something
    }
    
  2. b==0b のすべての要素が 0 の場合に 何かを実行します。 TRUEfor b <- 0and b <- c(0, 0)and b <- c(0, 0, 0)and ...

    if (all(b==0)) {
      # do something
    }
    
  3. b==0b のいずれかの要素が 0 の場合に 何かを実行します。 TRUEfor b <- 0and b <- c(12, 0, 34, 2, 3)and b <- c(0, 0, 3, 2)and ...

    if (any(b==0)) {
      # do something
    }
    
于 2013-01-01T17:12:04.647 に答える
0

次のように試してください%in%

foo <- function(b) {
  if(0 %in% b) {
    ## do something
    writeLines("Zero was in `b`")
  }
}

> b <- 0
> foo(b)
Zero was in `b`
> b <- c(1,4,5)
> foo(b)
> b <- c(b, 0)
> foo(b)
Zero was in `b`

ここでのポイントは、関心のあるもの (ここで0は ) が vector を介して提供されるアイテムのセットに含まれているかどうかを確認することですb

「do something else」の場合はfoo()、次のelse句で拡張する必要があります。

foo <- function(b) {
  if(0 %in% b) {
    ## do something
    writeLines("Zero was in `b`")
  } else {
    ## do something else
    writeLines("Zero was not in `b`")
  }
}

> b <- 0
> foo(b)
Zero was in `b`
> b <- c(1,4,5)
> foo(b)
Zero was not in `b`
> b <- c(b, 0)
> foo(b)
Zero was in `b`
于 2013-01-01T16:37:30.767 に答える