2017-01-08 16 views
1

IはTL == 2のみ1 IF 2垂直を描画する以下Rコードでabline()コマンドを取得する方法を思ったんだけど垂直線IF tl == 1同じ線の色(例:「緑色」)ですか?ここでifelse()R

は私のRコード(なしの成功と)である:

CBT <- function(g,r,n,tl){ 

curve(dt(x,n),-5,6,col="red") 

abline(v=ifelse(tl==2,c(-2,2),2),col="green") ## HERE needs a fix?? 
} 

## Test this: 
CBT(.4,.05,20,2) 

答えて

2

我々は1のための 'TL'、つまり条件の両方が必要な場合我々はif/else条件

CBT <- function(g,r,n,tl){ 
curve(dt(x,n),-5,6,col="red") 
if(tl==2){ 
    abline(v=c(-2,2), col="green") 
    } else { 
    abline(v = 2, col="green") } 
} 

CBT(.4,.05,20,2) 

を使用することができ、 2、その他の場合

CBT <- function(g,r,n,tl){ 
curve(dt(x,n),-5,6,col="red") 
if(tl==2){ 
    abline(v=c(-2,2), col="green") 
    } else if(tl==1){ 
    abline(v = 2, col="green") 
} else {abline(v=NA)} 
} 

CBT(.4,.05,20,2) 
CBT(.4,.05,20,1) 
CBT(.4,.05,20,0) 
+0

@parvinkarimi私は単一の要素に基づく条件のために 'if/else'条件を使います。私は 'ifelse'を示した別の答えがあると思います。あなたのポストで 'ifelse'条件を見ると、' tl == 2、c(-2,2) '論理インデックスは長さ1ですが、TRUE条件は長さ2です(' c(-2,2) ')。だから、二番目を 'list'に入れておくのが良いです – akrun

2

ifelse呼び出しは、2つの条件に適した値を持つリストにインデックスを返します。

CBT <- function(g,r,n,tl){ 
     curve(dt(x,n),-5,6,col="red") 
     abline(v= list(c(-2,2), 2) [[ ifelse(tl==2, 1, 2)]], col="green") 
    } 
CBT(.4,.05,20,1.5) 

私はifelseあなたの方法を使用しようと問題はifelseが条件と同じ長さの値を返すように設計されていることだと思います。インデックスとして使用すると、長さを変えることができます。

+0

@ 42-ありがとう、同じロジックが' points() 'コマンドには当てはまらないようですね。例: 'points(list(c(-2,2)、2)[[ifelse(tl == 2,1,2)]]、 - 。017、bg =" green "、col =" green "、 pch = 21、cex = 1、xpd = T) ' – rnorouzian

+0

' points'が付随する可能性がありますが、x引数とay引数の両方を指定する必要があるため、 'do.call'を使って' points'に引数リストを渡すことができます。あるいは、x値に 'ifelse'を、y値にもう一つ' ifelse'を持たせることもできます –

関連する問題