2017-04-11 31 views
0

我不知道如何來調節ylim = c(...)curve()這樣,如果a(見下面我的R代碼裏面),小於.013,然後R使用自己的機制來決定ylim(=什麼也不做,讓R決定)ELSE集ylim = c(0, 3)空調ylim:做到這一點還是讓R請勿彷彿ylim未指定

我需要幫助ylim(=什麼都不做,讓R決定)是什麼?

P.S.我將無法使用NANULL或留爲空白{}range讓R理解我想讓R決定ylim。因爲,如在下面的例子中所示,alphabeta大小可導致一些y軸值成爲non-finite號碼,然後使ř產生錯誤消息,指出:

Error in plot.window(...) : need finite 'ylim' values

一些其他techinquies包括使用ylims = max(range(dbeta(seq(0, 1, len = 1e4), alpha, beta)), na.rm = T)排除非有限數字是不成功的。所以,只有當你沒有指定YLIM R時,該圖不能表明什麼樣的ALPHA和BETA被使用。

因此:通過讓[R決定我的意思是 - [R 完全自由決定對Ylim 彷彿YLIM尚未指定。

a = .012 
alpha = 0.40331774 
beta = 15.25120793 

ylim = if(a < .013){ NULL }else{ c(0, 3) } 

curve(dbeta(x, alpha, beta), 0, 1, ylim = ylim) 

回答

0

您可以使用range上滿fonction設置ylim

a = .012 
ylim = if(a < .013){ range(curve(dbeta(x, 1.00139859, 1.94547309), 0, 1)) }else{ c(0, 3) } 
curve(dbeta(x, 1.00139859, 1.94547309), 0, 1, ylim = ylim) 

enter image description here

a = .015 
ylim = if(a < .013){ range(curve(dbeta(x, 1.00139859, 1.94547309), 0, 1)) }else{ c(0, 3) } 
curve(dbeta(x, 1.00139859, 1.94547309), 0, 1, ylim = ylim) 

enter image description here

編輯 可避免Infylim這樣

a = .012 
alpha = 0.40331774 
beta = 15.25120793 

func <-curve(dbeta(x, alpha, beta), 0, 1) 
ylim = if(a < .013){ range(func$y[func$y<Inf&func$y>-Inf]) }else{ c(0, 3) } 
curve(dbeta(x, alpha, beta), 0, 1, ylim = ylim) 

EDIT2 要循環繪製。我加了readline(prompt="Press [enter] to continue"),否則它太快了。

for (i in 1:10) { 
plot(rnorm(10)) 
readline(prompt="Press [enter] to continue") 
} 
+0

請參閱我編輯的問題,看看爲什麼這些方法,我以前嘗試所有不起作用。 – rnorouzian

+0

@parvinkarimi查看我的編輯 –

+0

嗨,P Lapointe,只是一個小問題。我如何循環下面的**重複10次**:plot(rnorm(10))'? – rnorouzian

0

你非常接近,

a=.012 
if(a >= .013){ 
    ylim <- c(0,3) 
} else{ 
    ylim <- NULL 
    } 

curve(dbeta(x, 1.00139859, 1.94547309), 0, 1, ylim = ylim) 

編輯: 這是很容易寫自己的曲線函數或破解版基。通過這種方式,您不需要撥打curve來提取範圍,避免了兩次繪製該功能。

xseq <- seq.int(0,1,length.out = 101) # default values from curve() 
y <- sapply(xseq, function(x) dbeta(x, 0.40331774, 15.25120793)) 

plot_curve <- function(x, y, a, ...){ 
    if(a >= .013){ 
    ylim <- c(0,3) 
    } else{ 
    ylim <- range(y[is.finite(y)]) 
    } 
    plot(x, y, ylim = ylim, type = "l", ...) 
} 

您可以測試如下。

plot_curve(xseq, y, a = .012) 
plot_curve(xseq, y, a = .014) 
+0

shyaa之間的5秒鐘,請再次閱讀我的問題的** P.S **部分。 – rnorouzian

+1

請參閱我編輯的問題。 – rnorouzian

+0

@parvinkarimi。我編輯了我的答案以反映你編輯的問題。對我而言,你現在的意思就更清楚了。 – shayaa

相關問題