在R中定义一个函数并绘制其图

时间:2013-11-21 08:27:13

标签: r

我需要定义以下函数,并需要在R中为它绘制图形。

0 <= x <= 975    f(x)=975
975 < x <= 1025  f(x)=x
1025 < x         f(x) = 1025

我尝试按以下方式定义它,但它给了我语法错误 -

myfunc <- function() 
{
if (xx <= 975) 
{return(975)} 
else if (xx < 975 and xx <= 1025)
{return(xx)}
else {return (1025)}
}

我在下面的页面中提到了语法。 http://www.dummies.com/how-to/content/how-to-chain-if133else-statements-in-r.html

定义功能后,我想绘制它。以下命令会起作用吗?

curve(expr=myfunc,from=0,to=1100,xlim=c(0,1100),ylim=c(0,1100),xlab="",ylab="") 

请告知我是否需要提供更多信息。

3 个答案:

答案 0 :(得分:0)

您收到错误,因为布尔AND不是“and”而是“&amp;”:

else if (xx < 975 & xx <= 1025)

除此之外,你的意思是:

else if (xx > 975 and xx <= 1025)

你也应该提供你的论证功能:

myfunc <- function(xx)

答案 1 :(得分:0)

以下是您要寻找的整体解决方案:

myfunc <- Vectorize(function(xx) {
  if (xx <= 975){
    return(975)
  } else if (xx > 975 && xx <= 1025){
    return(xx)
  } else {
    return (1025)
  }
})

curve(myfunc, 0, 1100, xlim=c(0,1100), ylim=c(0,1100), xlab="", ylab="")

答案 2 :(得分:0)

&已被指出给你。你的函数也需要一个参数,它需要被矢量化才能与curve一起使用。您可以使用ifelse代替ifelse来实现矢量化。但是,我相信以下内容更好:

myfunc <- function(x) {
  #find the intervals in which each value is
  interv <- as.integer(cut(x, c(0,975,1025,Inf),include.lowest = TRUE))
  #in arithmetic operations logical values TRUE/FALSE are coerced to 1/0
  (interv==1L)*975 + (interv==2L)*x + (interv==3L)*1025
}

#note the n=1e3 which achieves a better resolution of the curve
curve(expr=myfunc,from=0,to=1100,
         xlim=c(0,1100),ylim=c(0,1100),xlab="",ylab="", n=1e3) 

enter image description here