簡體   English   中英

R:繪制分段函數

[英]R: Plot Piecewise function

我在R中定義的分段函數存在一些問題。

我將函數定義為:

g1 <- function(x) {
  if (x <= 0.25) {
    y <- gs1(x)
  }
  else if (x >= 0.75) {
    y <- gs3(x)
  }
  else {y <- gs2(x)}
  y
}

其中gs1,gs2,gs3是我之前定義的函數。

為了繪制函數g1,我嘗試:

curve(g1)

但是R顯示以下內容:

Warning message:
In if (x <= 0.25) { :
  the condition has length > 1 and only the first element will be used

我認為問題可能是R要求函數的參數為​​數字而不是向量? 我不確定我是否正確。

我通過使用以下方法找出了繪圖問題:

xx <- seq(0,1,length=200)
yy <- apply(as.matrix(xx),1,g1)
plot(xx,yy,type='l')

但是我仍然想問有什么方法可以解決這種問題,因為我發現我定義的分段函數對於許多其他命令也不可行。 例如,假設我想將g1集成到0到1之間,如果我只是嘗試在R中“集成”功能,則會出現相同的警告消息。

您的問題是您正在尋找向量化if-else,嘗試ifelse或使用result<-sapply(vector, g1)應用函數

您需要定義函數,以便它可以直接接受向量作為輸入。

一種方法是

g1 <- function(x) 
  (x <= 0.25)*gs1(x) + (x <= 0.75 & x > 0.25)*gs3(x) + (x > 0.75)*gs2(x)

或者,

g1 <- function(x) {
  y <- gs1(x)
  y[x > 0.25] <- gs3(x[x > 0.25])
  y[x > 0.75] <- gs2(x[x > 0.75])
  y
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM