我创建了以下函数,目的是应用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
#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)
}
)
这很有效:
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
我知道他的名单上没有名字,所以出现了错误。但是,如果不为列表中的每个元素指定名称,我怎么能通过它呢。
感谢Metrics和Richard