如何摆脱这种内在条件?

时间:2017-11-06 15:00:47

标签: r

如果参数negation为真,那么condition应该被否定。有没有更方便的方式来写这个?

foo <- function (x, type, negation){
  if(type == 1){
    condition <- x > 1
    if(negation){
      condition <- !condition
    }
  }
  if(type == 2){
    condition <- x == 5
    if(negation){
      condition <- !condition
    }
  }
  x[condition]
}

编辑: 例如:

x <- 1:10

foo(x, 1, T) # 1
foo(x, 1, F) # 2  3  4  5  6  7  8  9 10
foo(x, 2, T) # 1  2  3  4  6  7  8  9 10
foo(x, 2, F) # 5

2 个答案:

答案 0 :(得分:6)

如果将来会有很多类型,请考虑使用S3 OOP系统。 如果不是:

foo <- function(x, type, negation) {
  condition <- switch(
    type,
    `1` = x > 1,
    `2` = x == 5
  )

  x[xor(negation, condition)]
}

答案 1 :(得分:2)

(在 @PoGibas 评论之后):

foo <- function (x, type, negation){
  if(type == 1){
    condition <- x > 1
  }
  if(type == 2){
    condition <- x == 5
  }
  if(negation){
    condition <- !condition
  }
  x[condition]
}

任何其他改进它的想法?