0

我坚持用 R 公式写这个公式,我真的需要帮助。问题是我想生成如下系列:

x<-seq(-3,3,0.01)
y0<-exp(-abs(x)^0)
y1<-exp(-abs(x)^1)
y2<-exp(-abs(x)^2)
y3<-exp(-abs(x)^3)
y4<-exp(-abs(x)^4)
plot(y[1]~x)
plot(y[2]~x)
etc.

现在我想写一个循环,这样:

x<-seq(-3,3,0.01)
y[i]<-exp(-abs(x)^i)
plot(y[i]~x)

我写的代码是:

par(mfrow=c(3,4))
x<-seq(-3,3,0.01)
for(i in 0:5){
  y[i]<-exp(-abs(x)^i)
}
plot(y[i]~x)

我从 R 收到的错误消息是:

> Warning messages:
1: In y[i] <- exp(-abs(x)^i) :
  number of items to replace is not a multiple of replacement length

非常感谢您的帮助。它真的让我烦恼,但我只是不明白我所缺少的。

4

2 回答 2

1

我会使用 来完成expand.grid(),它会为您提供 i 和 x 的所有组合。这里不需要循环。

x <- seq(-3,3,0.01)
i <- 1:4
df <- expand.grid(x, i)
df$y <- exp(-abs(df$Var1)^df$Var2)

require(ggplot2)
ggplot(df, aes(x = Var1, y = y, col = factor(Var2))) +
  geom_point()

在此处输入图像描述

于 2013-07-25T08:05:33.557 回答
0

完全同意EDi的解决方案。只是为了表明您也可以解决原始代码中的错误,这里有一个解决方案:

par(mfrow=c(3,2))
x<-seq(-3,3,0.01)
# you have to initialize y and it has to be two-dimensional 
y <- matrix(nrow=6, ncol=length(x))
for(i in 0:5){
  # again, y has 2 dimensions and 
  # a matrix only has positive indexes 
  y[i+1,]<-exp(-abs(x)^i)
  # you want to plot from within the loop
  plot(y[i+1,]~x)
}
于 2013-07-25T08:14:07.870 回答