在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
。此外,您可能有两个}
一行:请看我的答案。