2017-11-11 1 views
2

これはかなり単純な質問ですが、私は数時間の時間を探していて、頭を上げることはできません。OR演算子をファンクションスイッチ

私は私の機能のためのスイッチを構築しようとしている:

output <- "both" 

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

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

これはpartoneparttwoを生成する必要があります。一方、ちょうどpartone

これはどのように機能しますか?

+0

'=='単一の要素で動作する再利用のための関数を作成します。 '%in%'または 'grepl'のいずれかが必要な場合があります。if(any(出力%in%c( 'both'、 'partone')))' – akrun

答えて

2

出力で、我々は論理的な状態を確認した場合

output== "both" | "partone" 

エラー== "両方" | 「partone」:操作が可能です 数字のみのため、論理的または複合型

我々は文字列要素のvector

output %in% c('both', 'partone') 
#[1] TRUE 
%in%を使用し、いずれかの「両方」または「partone」をチェックする必要があるとして

は今、

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")} 

希望する出力が得られます。