替代if-then-else与R中的逻辑变量

时间:2015-07-24 21:18:24

标签: r if-statement

让我们说我有一个函数,它接受三个逻辑参数并返回一个字符串,表明哪些被设置为TRUE:

func_log <- function(option_1, option_2, option_3) {
    if (option_1 && option_2 && option_3) {
        opt <- "all"
    } else {
        if (option_1 && option_2) {
            opt <- "first two"
        } else {
            if (option_1 && option_3) {
                opt <- "first, last"
            } else {
                opt <- "last two"
            }
        }
    }
return(opt)
}

有没有办法避免在这里构建这些if-else?使用switch可能会(感谢一个例子)?还有别的吗?

2 个答案:

答案 0 :(得分:4)

怎么样

mystrfun <- function(...) toString(c(letters,LETTERS)[myfun(...)])

mystrfun(TRUE,FALSE,TRUE)
# [1] "a, c"
mystrfun(FALSE,FALSE,TRUE,TRUE,FALSE,TRUE)
# [1] "c, d, f"

如果您愿意,可以在这些案例中加上名称,例如

c(letters,LETTERS)

将{{1}}替换为您想要的名称,并将它们串在一起。

答案 1 :(得分:2)

另一个想法...手动枚举表格中的案例,然后matchmerge分配它们:

mynames <- read.table(header=TRUE,colClasses="character",text="
case name
000  nope
001  last
011  lasttwo
010  middler
100  first
110  firsttwo
111  allyall
101  nomid")

myoddfun <- function(...) with(mynames,name[match(paste0(+c(...),collapse=""),case)])

myoddfun(TRUE,FALSE,TRUE)
# [1] "nomid"
myoddfun(FALSE,FALSE,FALSE)
# [1] "nope"