在中构建数据帧并从for循环输出
基本上,我正在尝试创建一个函数来生成黄土模型,然后在指定范围内预测模型的值,并将其输出到数据帧。我有不同的功能,使用相同的通用结构输出我构建的数据帧,但这个似乎不起作用,我不知道为什么。我认为这是一个令人尴尬的简单 伪造数据在中构建数据帧并从for循环输出,r,loops,for-loop,R,Loops,For Loop,基本上,我正在尝试创建一个函数来生成黄土模型,然后在指定范围内预测模型的值,并将其输出到数据帧。我有不同的功能,使用相同的通用结构输出我构建的数据帧,但这个似乎不起作用,我不知道为什么。我认为这是一个令人尴尬的简单 伪造数据 mod<-data.frame(k1=c(200:600), a=rnorm(401, 20,5), b=rnorm(401, 20,5), c=rnorm(401, 20,5), k2=c(200:600), d=rnorm(401,
mod<-data.frame(k1=c(200:600), a=rnorm(401, 20,5), b=rnorm(401, 20,5), c=rnorm(401, 20,5),
k2=c(200:600), d=rnorm(401, 20,5), e=rnorm(401, 20,5), f=rnorm(401, 20,5))
生成一个函数,在数据帧中循环,执行预处理,并将预处理结果输出到一个可供以后使用的对象。“s”是用户需要能够修改的变量
nofun<-function(mod, s=rep(0.5,(dim(mod)[[2]]-2))){
d<-dim(mod)[[2]]
这不会为我返回错误。但是,
nofun
缺少返回值。在最后一个}
之前添加pred_a
。对,但这只是输出到控制台。如果我运行nofun(mod),我将看到输出。如果我输入pred_a。未捕获该输出(“错误:未找到对象“pred_a”)。我可以通过键入pred_aal来解决这个问题,虽然后者是可能的,但这与语言的概念是背道而驰的。函数应该只有一个返回值,然后可以将其分配给变量,并且没有副作用(如创建R对象)。因此,请使用pred_a
nofun<-function(mod, s=rep(0.5,(dim(mod)[[2]]-2))){
d<-dim(mod)[[2]]
mod_a<-mod[,1:(d/2)]
k<-c(200:600)
pred_a<-data.frame(k)
for(i in 1:(d/2-1)){
a.loess<-loess(mod_a[,i+1] ~ mod_a[,1], span=s[i], data=mod_a)
a.pred <-predict(a.loess,k)
a.pred[a.pred<0]<-0
pred_a<-cbind(pred_a, a.pred)
}
}
nofun(mod)
pred_a