让我们说我有一个函数,它接受三个逻辑参数并返回一个字符串,表明哪些被设置为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
可能会(感谢一个例子)?还有别的吗?
答案 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)
另一个想法...手动枚举表格中的案例,然后match
或merge
分配它们:
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"