R:绘制分段函数

时间:2014-03-11 14:50:44

标签: r function piecewise

我在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中尝试“集成”功能,则会出现相同的警告消息。

2 个答案:

答案 0 :(得分:1)

您的问题是,您正在寻找矢量化if-else,尝试ifelse或使用result<-sapply(vector, g1)

来应用您的函数

答案 1 :(得分:1)

您需要定义函数,以便它可以直接接受矢量作为输入。

一种方法是

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
}