首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何摆脱这种内在状态?

如何摆脱这种内在状态?
EN

Stack Overflow用户
提问于 2017-11-06 15:00:47
回答 2查看 74关注 0票数 1

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

代码语言:javascript
复制
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]
}

编辑:示例:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-06 15:28:51

如果将来会有多种类型,请考虑使用S3 OOP系统。若否,则:

代码语言:javascript
复制
foo <- function(x, type, negation) {
  condition <- switch(
    type,
    `1` = x > 1,
    `2` = x == 5
  )

  x[xor(negation, condition)]
}
票数 6
EN

Stack Overflow用户

发布于 2017-11-06 15:18:55

(在@PoGibas注释之后):

代码语言:javascript
复制
foo <- function (x, type, negation){
  if(type == 1){
    condition <- x > 1
  }
  if(type == 2){
    condition <- x == 5
  }
  if(negation){
    condition <- !condition
  }
  x[condition]
}

还有其他改进的办法吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47139808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档