使用R中的for循环在多个数据集上运行函数

时间:2015-10-08 18:28:13

标签: r loops lm

假设我有几个数据集,d1d2d3,存储为列表:

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])
}

我想向此函数提供用于回归的参数(ab),然后是list中存储的数据集列表。请注意,此功能目前无法正常工作。我希望它计算数据集特定的拟合并返回斜率。

1 个答案:

答案 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