0

基本上,我正在尝试制作一个将生成黄土模型的函数,然后预测模型在指定范围内的值,并将其输出到数据框。我有不同的功能,使用相同的通用结构输出我构建的数据框,但是这个似乎不起作用,我不知道为什么。我认为这很简单。

制作一些虚假数据

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
4

0 回答 0