或运算符作为功能开关

时间:2017-11-11 09:14:15

标签: r logical-operators

我觉得有点尴尬地问这个相当简单的问题,但我现在正在寻找几个小时而无法理解。

我试图为我的功能构建一个开关:

output <- "both"

if (output== "both" | "partone")
{cat("partone")}

if (output=="both" | "parttwo")
{cat("parttwo")}

这应该产生partoneparttwo。而output <- "partone"只是partone

这怎么可行?

3 个答案:

答案 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'))