基本上,我正在尝试制作一个将生成黄土模型的函数,然后预测模型在指定范围内的值,并将其输出到数据框。我有不同的功能,使用相同的通用结构输出我构建的数据框,但是这个似乎不起作用,我不知道为什么。我认为这很简单。
制作一些虚假数据
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))
删除所有剩余变量
rm(pred_a, a.pred, a.loess)
生成一个函数来遍历数据帧,执行 loess,并将预测输出到一个可以稍后使用的对象。“s”是用户需要能够修改的变量。
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)
将预测输出分配给数据框或矩阵。如果我将第 5 行包装在 print() 语句中(即,它将正确的数据输出到控制台),这似乎可以工作,但它不会在工作区中创建变量。
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’”
pred_a