2017-11-11 219 views
2

我觉得有点尴尬,问这个相当简单的问题,但我现在正在寻找几个小时,无法让我的头。或操作员作为功能开关

我试图建立我的功能开关:

output <- "both" 

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

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

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

这是如何工作的?

+0

''==与工作的单个元素。你可能需要'%in%'或'grepl',即'if(any%(output%in%c('both','partone')))' – akrun

回答

2

如果我们检查的逻辑条件

output== "both" | "partone" 

错误输出== “既” | “partone”:操作仅适用于数字,逻辑或复杂类型

我们需要检查的是“两个”或“partone”,对字符串元素的vector使用%in%是可能

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')) 
2

此语法不正确:

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

你可以这样写:

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

或者这样:

if (output %in% c("both", "partone")) 
{cat("partone")} 
2

使用这样的事情。

if (output %in% c("both","partone")) 

{cat("partone")} 

if (output %in% c("both","parttwo")) 

{cat("parttwo")} 

它会产生你想要的输出。