如何使用数据框使用绘图功能创建循环功能

时间:2018-06-27 20:15:31

标签: r loops dataframe matrix smoothing

这是我的代码

require(splines)
library(ISLR)

 x <- runif(1000,min=0,max=10)
lambda=(2*x)+(0.2*x*sin(x))
y <- rpois(1000,lambda)

J <- data.frame(x=x, y=y)

现在我想做的就是使用

使此功能平滑
 smoothing=lm(y~ns(x=x,df=1),data=J)

ajust=predict(object=smoothing)

,然后使用

跟踪平滑线
plot(x=x,y=y,cex=0.4)
lines(x,ajust,lwd=2)

我想要一个结合了这3个操作的循环,对于df = 1,...,20 所以基本上我想跟踪20条不同的平滑线(df = 1,...,20)

我已经使用了它,并且我认为它可以工作,但是想知道我是否可以将所有内容保留在数据框中而不是执行矩阵操作。

dat=matrix(data=(1:20000),ncol=20)
for (i in (1:1000)){ 
for (d in (1:20)){
smoothing=lm(y~ns(x=x,df=d),data=J)
ajust[i,d]= predict(object=smoothing)[i] }}

trace= function(d){
plot(x,y)
lines(x,ajust[,d]) }

for (d in (1:20)) {trace(d)}

感谢您的帮助!谢谢!!

1 个答案:

答案 0 :(得分:1)

  

我已经使用了它,并且我认为它可以工作,但是想知道我是否可以保留   而不是执行矩阵操作。

是的,可以。

还有一些小的索引问题,并且在您的代码的正确部分中未调用plot(),该问题已在以下位置修复:

# data.frame works fine:
ajust = structure(list(X1 = 1:1000, X2 = 1001:2000, X3 = 2001:3000, X4 = 3001:4000, 
                     X5 = 4001:5000, X6 = 5001:6000, X7 = 6001:7000, X8 = 7001:8000, 
                     X9 = 8001:9000, X10 = 9001:10000, X11 = 10001:11000, X12 = 11001:12000, 
                     X13 = 12001:13000, X14 = 13001:14000, X15 = 14001:15000, 
                     X16 = 15001:16000, X17 = 16001:17000, X18 = 17001:18000, 
                     X19 = 18001:19000, X20 = 19001:20000), class = "data.frame", row.names = c(NA, 
                                                                                                -1000L))


smoothing=lm(y~ns(x=x,df=1),data=J)

for (i in (1:1000)){ 
  for (d in (1:20)){
    smoothing=lm(y~ns(x=x,df=d),data=J)
    ajust[i,d]= predict(object=smoothing)[i] }}

plot(x,y) # call this outside of the function/loop
trace= function(d){
  lines(x,ajust[,d]) }

for (d in (1:20)) {trace(d)}