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

有一个替代解决方案使用相同,任何和所有。

根据您的描述,我会推断出三种情况,不确定您实际需要哪一种:

  1. 仅当 时才做某事b==0。如果b!=0或如果length(b)>1那么不要这样做。 TRUE只为b <- 0

    if (isTRUE(identical(b, 0))) {
      # do something
    }
    
  2. b==0如果b 的所有元素都为 0 ,则做某事。 TRUEfor b <- 0and b <- c(0, 0)and b <- c(0, 0, 0)and ...

    if (all(b==0)) {
      # do something
    }
    
  3. b==0如果b 的任何元素为 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

对于“做其他事情”的情况,您需要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 回答