我需要定义以下函数,并需要在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="")
请告知我是否需要提供更多信息。
答案 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
代替if
和else
来实现矢量化。但是,我相信以下内容更好:
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)