在R中绘制分段函数

时间:2017-09-13 23:02:02

标签: r

我正在尝试使用if语句绘制下面的分段函数,并且我一直在使用

Error: unexpected '}' in "}"

消息。我的所有牙套对我来说都很好,所以我不知道它来自哪里。这里的任何建议将不胜感激。 (另外,这基本上是我第一次在R中做过这样的事情,所以请耐心等待。)

x.values = seq(-2, 2, by = 0.1)
n = length(x.values)
y.values = rep(0, n)
for (i in 1:n) {
x = x.values[i]
if (x <= 0) {
    y.values = -x^3
} else if (x <= 1) {
    y.values = x^2
} else {
    y.values = sqrt(x)
}   y.values[i] = y }

2 个答案:

答案 0 :(得分:2)

这可以通过利用R函数通常被矢量化的事实而无需循环来完成。

例如:

library(tidyverse)
theme_set(theme_classic())

dat = data.frame(x=x.values)

在基地R,你可以这样做:

dat$y = with(dat, ifelse(x <= 0, -x^3, ifelse(x<=1, x^2, sqrt(x))))

使用tidyverse功能,您可以:

dat = dat %>% 
  mutate(y = case_when(x <= 0 ~ -x^3,
                       x <= 1 ~ x^2,
                       TRUE ~ sqrt(x)))

然后,绘制:

ggplot(dat, aes(x,y)) + geom_line() + geom_point()

enter image description here

答案 1 :(得分:1)

当我确保换行符位于正确位置时,我不会收到有关意外符号的错误:

x.values = seq(-2, 2, by = 0.1)
n = length(x.values)
y.values = rep(0, n)
for (i in 1:n) {
  x = x.values[i]
  if (x <= 0) {
    y.values = -x^3
  } else if (x <= 1) {
    y.values = x^2
  } else {
    y.values = sqrt(x)
  }   
  y.values[i] = y 
}

但是,我得到的是最后一行y不存在的投诉。

由于这是家庭作业,我将停止这个部分答案:P