2017-11-11 154 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")} 

它會產生你想要的輸出。