2017-01-08 170 views
1

我想知道如何得到abline()在下面的R代碼裏面命令來繪製2垂直IF TL == 2和僅1垂直線IF tl == 1具有相同的線條顏色(例如「綠色」)?ifelse在abline()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

我們可以用一個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) 

如果我們需要兩個條件,即 'TL' 1, 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我會用'如果基於單個元件上的條件/ else'條件。我認爲還有另外一個答案顯示了「ifelse」。如果我們看看你的帖子中的'ifelse'條件,'tl == 2,c(-2,2)',邏輯索引長度爲1,而TRUE條件爲長度2('c(-2,2) ')。所以最好將第二個放在一個'list'中,第二個放在''列表中' – akrun

2

您可以使用ifelse調用返回一個索引到一個列表,其中包含兩個條件的合適值。

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'可以accompdated而是因爲你必須同時提供一個X和y的說法,你可以使用'do.call'提供的參數列表'points'。或者你可以有一個'ifelse'作爲x值,另一個作爲y值 –