假设我有几个数据集,d1
,d2
,d3
,存储为列表:
a<-1:10
d1<-data.frame(a)
d2<-data.frame(a)
d3<-data.frame(a)
d1$b<-a*1
d2$b<-a*2
d3$b<-a*3
list<-c(d1,d2,d3)
然后我有一个适合回归的函数。
fxn<- function(param1, param2, dataset){
mod<-lm(dataset$param1~dataset$param2)
return(coef(mod)[2])
}
我想向此函数提供用于回归的参数(a
和b
),然后是list
中存储的数据集列表。请注意,此功能目前无法正常工作。我希望它计算数据集特定的拟合并返回斜率。
答案 0 :(得分:2)
我认为你希望这个函数是这样的:
fxn<- function(param1, param2, dataset){
#run model according to param1 and param2
mod<-lm(dataset[,param1]~dataset[,param2])
#calculate slope
slope <- coef(mod)[2]
#name it correctly
names(slope) <- param2
return(slope)
}
然后你可以使用lapply
为每个data.frame使用该函数:
lapply(list, function(x) fxn('a','b',x))
输出:
[[1]]
b
1
[[2]]
b
0.5
[[3]]
b
0.3333333
数据:
a<-1:10
d1<-data.frame(a)
d2<-data.frame(a)
d3<-data.frame(a)
d1$b<-a*1
d2$b<-a*2
d3$b<-a*3
#made a small change
#stored the data.frames in a list
#as I assume you probably wanted
list<-list(d1,d2,d3)
编辑:
因此,为了创建您在评论中提到的格式,您可以这样做:
#first have the data.frames in a named list
list<-list(d1=d1,d2=d2,d3=d3)
然后执行:
temp <- data.frame(t(data.frame(lapply(list, function(x) fxn('a','b',x)))))
#and if you want rownames as a column
temp$dfs <- row.names(temp)
> temp
b dfs
d1 1.0000000 d1
d2 0.5000000 d2
d3 0.3333333 d3