【问题标题】:R: Plot Piecewise functionR:绘制分段函数
【发布时间】:2014-03-11 14:50:44
【问题描述】:

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

【问题讨论】:

    标签: r function piecewise


    【解决方案1】:

    您的问题是您正在寻找矢量化 if-else,试试 ifelse,或使用 result&lt;-sapply(vector, g1) 应用您的函数

    【讨论】:

      【解决方案2】:

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

      一种方法是

      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
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-29
        • 2015-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多