R为简单公式的循环解决方案

时间:2013-07-25 07:55:58

标签: r for-loop formula

我坚持用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

非常感谢您的帮助。它真的让我烦恼,但我不知道我错过了什么。

2 个答案:

答案 0 :(得分: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()

enter image description here

答案 1 :(得分: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)
}