我觉得有点尴尬地问这个相当简单的问题,但我现在正在寻找几个小时而无法理解。
我试图为我的功能构建一个开关:
output <- "both"
if (output== "both" | "partone")
{cat("partone")}
if (output=="both" | "parttwo")
{cat("parttwo")}
这应该产生partone
和parttwo
。而output <- "partone"
只是partone
。
这怎么可行?
答案 0 :(得分:3)
使用类似的东西。
if (output %in% c("both","partone"))
{cat("partone")}
if (output %in% c("both","parttwo"))
{cat("parttwo")}
它将产生您想要的输出。
答案 1 :(得分:2)
此语法不正确:
if (output== "both" | "partone") {cat("partone")}
您可以这样写:
if (output == "both" || output == "partone")
{cat("partone")}
或者像这样:
if (output %in% c("both", "partone"))
{cat("partone")}
答案 2 :(得分:2)
如果我们检查逻辑条件
output== "both" | "partone"
输出错误==“both”| “partone”:操作是可能的 仅适用于数字,逻辑或复杂类型
由于我们需要检查'both'或'partone',请在%in%
字符串元素上使用vector
output %in% c('both', 'partone')
#[1] TRUE
现在,创建一个可重用性的函数
f1 <- function(out, vec) {
if(out %in% vec) cat(setdiff(vec, 'both'), '\n')
}
output <- 'both'
f1(output, c('both', 'partone'))
#partone
f1(output, c('both', 'parttwo'))
#parttwo
output <- 'partone'
f1(output, c('both', 'partone'))
#partone
f1(output, c('both', 'parttwo'))