如何迭代R中的数据帧列表

如何迭代R中的数据帧列表,r,coding-style,dataframe,R,Coding Style,Dataframe,我在R中有一个列表,其中包含几个数据帧。我想迭代数据帧并计算数据帧中某个值的最小/最大值。以下是我现在掌握的代码: firstname = names(dats)[1] xlim = c( min( dats[[firstname]][,xlab] ), max( dats[[firstname]][,xlab] ) ) for ( name in names(dats) ) { xlim = c( min(xlim[1],dats[[name]][,xlab]), max(xlim[2]

我在R中有一个列表,其中包含几个数据帧。我想迭代数据帧并计算数据帧中某个值的最小/最大值。以下是我现在掌握的代码:

firstname = names(dats)[1]
xlim = c( min( dats[[firstname]][,xlab] ), max( dats[[firstname]][,xlab] ) )
for ( name in names(dats) ) {
   xlim = c( min(xlim[1],dats[[name]][,xlab]), max(xlim[2],dats[[name]][,xlab]) )
} 

这对我来说似乎很难看,因为它需要很多代码来做一些非常简单的事情。在R中有更规范的方法吗?

您可以使用
lappy
从所有数据帧中提取
xlab
列,然后
unlist
组合成一个向量,然后取
min
max

xlab <- 'a'
dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
              df2 = data.frame(a=sample(1:3), b = sample(11:13)))

>  min( unlist( lapply( dats, '[', xlab ) ) )
[1] 1
>  max( unlist( lapply( dats, '[', xlab ) ) )
[1] 3
xlab最大值(未列出(lappy(dats,[',xlab)))
[1] 3

如果我正确理解了这个问题,以下是与plyr有关的内容:

dats <- list( df1 = data.frame(a=sample(1:3), b = sample(11:13)),
              df2 = data.frame(a=sample(1:3), b = sample(11:13)))

library(plyr)

xlim <- adply(do.call("rbind",dats),2,function(x)c(min(x),max(x)))
    names(xlim)=c("xlab","min","max")

xlim
  xlab min max
1    a   1   3
2    b  11  13

dats您能将数据帧列表中的数据帧组合成一个数据帧吗?我会使用
plyr
包和
rbind.fill
,这将允许数据帧具有不匹配的列,只要感兴趣的列在所有数据帧中命名相同

library(plyr)
df.orig <- data.frame(one = rep(1:4, each = 4), two = 1:16)
df.list <- dlply(df.orig, "one")
df.new <- rbind.fill(df.list)
xlim <- with(df.new, c(min(two), max(two)))
库(plyr)

对于Q,df.orig+1。与其说代码太多,还不如说它完全不可读。为了理智起见,必须有更好的方法。你能提供一些示例数据吗?