应用嵌套的lapply函数

时间:2015-02-25 03:40:59

标签: r lapply

我创建了以下函数,目的是应用两次lapply迭代。

'x'这里将是10个数据帧的列表,每个数据帧都有第一列作为响应变量。

首先,我通过传递保存它们的列表来应用lapply在这些数据帧上运行'lm',并指定第一列作为响应并对相应数据帧中的所有变量运行lm。

然后,我希望在每个数据框中创建一个列,一旦应用'lm',该列将包含拟合值。

  runit<-function(x){
     {lapply(x,function(data){lm(reformulate(termlabels=".",
      response=names(data)[1]),data)})
     }

     {
     lapply(x,function(data){data$fitted<-fitted(data)})
     }
     }

然而,这不起作用。运行后,我将'null'作为输出

runit(listcontainingdataframes)
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

2 个答案:

答案 0 :(得分:1)

#No need for two `lapply`
x<-list(mtcars,iris)
lapply(x,function(data){
                  data$result<-lm(reformulate(termlabels=".",response=names(data)[1]),data)$fitted
   return(data)
         }
)

答案 1 :(得分:1)

这有效:

hellow<-lapply(x,function(data){
    data$result<-fitted(lm(reformulate
 (termlabels=".",response=names(data)[1]),data,na.action="na.exclude"))
 return(data)   
}
)

但是,现在当我使用

list2env(hellow,.GlobalEnv)

将列表'hellow'转换为单个数据帧,我得

    Error in list2env(hellow, .GlobalEnv) : 
  names(x) must be a character vector of the same length as x

我理解列表hellow没有任何名称,因此错误。但是,如果不为列表中的每个元素指定名称,我怎么能超越它呢。

感谢Metrics和Richard