R:分段函数图

R:分段函数图,r,function,piecewise,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 } 但R显示以下内容: Warning message: In if (x <= 0.25) { : the condition has len

我在R中定义的分段函数有一些问题

我将函数定义为:

g1 <- function(x) {
  if (x <= 0.25) {
    y <- gs1(x)
  }
  else if (x >= 0.75) {
    y <- gs3(x)
  }
  else {y <- gs2(x)}
  y
}
但R显示以下内容:

Warning message:
In if (x <= 0.25) { :
  the condition has length > 1 and only the first element will be used
警告消息:
在if(x1)中,仅使用第一个元素
我想问题可能是R需要函数的参数作为一个数字而不是一个向量?我不确定我是否正确

我使用以下方法解决了绘图问题:

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

xx您的问题是您正在寻找矢量化的if-else,请尝试使用
if-else
或使用
result应用您的函数。您需要定义函数,以便它可以直接接受向量作为输入

一种方法是

g1 <- function(x) 
  (x <= 0.25)*gs1(x) + (x <= 0.75 & x > 0.25)*gs3(x) + (x > 0.75)*gs2(x)
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
}