我创建了以下函数,目的是应用两次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
答案 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