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

run a function on several data sets using a for loop in R

假设我有几个数据集,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 中的数据集列表。请注意,此功能目前无法正常工作。我希望它计算数据集特定拟合和 return 斜率。

我假设你希望函数是这样的:

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