在R中绘制分段函数

在R中绘制分段函数,r,R,我试图使用if语句来绘制下面的分段函数,并不断得到 Error: unexpected '}' in "}" 信息。我所有的牙套看起来都很好,所以我不知道这是从哪里来的。如果您有任何建议,我们将不胜感激。(而且,这基本上是我第一次在R中做这样的事情,所以请耐心听我说) x.values=seq(-2,2,by=0.1) n=长度(x.值) y、 值=代表(0,n) for(1:n中的i){ x=x.值[i] 如果(x这可以在没有循环的情况下通过利用R函数通常是矢量化的这一事实来实现 例如: l

我试图使用
if
语句来绘制下面的分段函数,并不断得到

Error: unexpected '}' in "}"
信息。我所有的牙套看起来都很好,所以我不知道这是从哪里来的。如果您有任何建议,我们将不胜感激。(而且,这基本上是我第一次在R中做这样的事情,所以请耐心听我说)

x.values=seq(-2,2,by=0.1)
n=长度(x.值)
y、 值=代表(0,n)
for(1:n中的i){
x=x.值[i]

如果(x这可以在没有循环的情况下通过利用R函数通常是矢量化的这一事实来实现

例如:

library(tidyverse)
theme_set(theme_classic())

dat = data.frame(x=x.values)
在base R中,您可以执行以下操作:

dat$y = with(dat, ifelse(x <= 0, -x^3, ifelse(x<=1, x^2, sqrt(x))))
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()

利用R函数通常是矢量化的这一事实,无需循环即可实现这一点

例如:

library(tidyverse)
theme_set(theme_classic())

dat = data.frame(x=x.values)
在base R中,您可以执行以下操作:

dat$y = with(dat, ifelse(x <= 0, -x^3, ifelse(x<=1, x^2, sqrt(x))))
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()

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

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 
}
x.values=seq(-2,2,by=0.1)
n=长度(x.值)
y、 值=代表(0,n)
for(1:n中的i){
x=x.值[i]

如果(x当我确保换行符位于正确的位置时,我不会得到关于意外符号的错误:

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 
}
x.values=seq(-2,2,by=0.1)
n=长度(x.值)
y、 值=代表(0,n)
for(1:n中的i){
x=x.值[i]

if(x)我当然感谢您的回答,但部分练习实际上是在“for”循环中专门使用“if”语句来创建函数。(也许我应该在OP中提到这一点。)因为这是一个赋值,让我给您一个提示:如果您将
y.values[I]=y}
在它自己的行上。但是它不会给你期望的结果。想想当你分配
y.values=-x^3
y.values=x^2
,等等时发生了什么。每次通过循环。好吧,我已经尝试了一些事情,并按照你的建议运行它(虽然,我仍然不能确切地确定为什么y.values[I]=y必须有一个单独的行)不断得到“y.values”找不到的错误。首先,“if”语句中的所有赋值,我从“y.values”改为“y.values[I]”(认为可能需要为向量的每个元素赋值),但遇到了同样的问题。我还尝试强制使用条件(因此,如果(x>0&&xr)不“喜欢看”特定的顺序。
y.values[I]=y
将当前的
y
值分配到
y.values
y=y.values[I]中的第I个位置
y.values
的第i个位置的当前值分配给
y
。还要注意,在初始代码中,您在if/else语句之后运行了
y.values[i]=y
,但
y
之前从未创建或分配过值。
y.values[i]=y]的单独一行
是为了避免在同一行上有两个
}
(这是导致错误的原因)。我当然感谢您的回答,但练习的一部分实际上是在“for”循环中专门使用“if”语句来创建函数。(也许我应该在操作中提到这一点。)因为这是一个赋值,让我给你一个提示:如果你输入
y.values[i],你的代码就会运行=y}
在它自己的行上。但是它不会给你期望的结果。想想当你分配
y.values=-x^3
y.values=x^2
,等等时发生了什么。每次通过循环。好的,我已经尝试了一些事情,并按照你的建议运行它(虽然,我仍然不能确切地确定为什么y.values[I]=y必须有一个单独的行)不断得到“y.values”找不到的错误。首先,“if”语句中的所有赋值,我从“y.values”改为“y.values[I]”(认为可能需要为向量的每个元素赋值),但遇到了同样的问题。我还尝试强制使用条件(因此,如果(x>0&&xr)不“喜欢看”特定的顺序。
y.values[I]=y
将当前的
y
值分配到
y.values
y=y.values[I]中的第I个位置
y.values
的第i个位置的当前值分配给
y
。还要注意,在初始代码中,您在if/else语句之后运行了
y.values[i]=y
,但
y
之前从未创建或分配过值。用于
y.values[i]的单独一行=y}
是为了避免在同一行上有两个
}
(这就是导致错误的原因)。是否有您没有向我们展示的内容,因为当我运行您的代码时,它会抱怨没有
y
。此外,可能是一行上有两个
}
:请看我的答案。是否有您没有向我们展示的内容,因为当我运行您的代码时,它会抱怨没有
y
。此外,您可能有两个
}
一行:请看我的答案。