R:在列表中应用函数

时间:2011-09-07 17:44:54

标签: r dataframe

我有一个包含2000个组件数据帧的大型列表。以下只是一个例子:

set.seed(1234)
mydf1 <- data.frame(v = c(1:5), x = rnorm(5, 0.06, 0.01))
mydf2 <- data.frame(v = c(1:5), x = rnorm(5, 0.06, 0.01))
mydf3 <- data.frame(v = c(1:5), x = rnorm(5, 0.06, 0.01))
mylist <- list(mydf1, mydf2, mydf3)

mylist

 [[1]]
  v          x
1 1 0.03792934
2 2 0.05277429
3 3 0.06084441
4 4 0.02654302
5 5 0.05429125

[[2]]
  v          x
1 1 0.05506056
2 2 0.04425260
3 3 0.04453368
4 4 0.04435548
5 5 0.04109962

[[3]]
  v          x
1 1 0.04522807
2 2 0.04001614
3 3 0.04223746
4 4 0.05064459
5 5 0.05959494

我希望通过x的值小于整个列表,该值小于&lt; 0.05(在每个列表组件内)并创建一个新列表。

mylist1 <- mylist[ which ( x < 0.05),] 

不起作用....请帮忙。感谢...

4 个答案:

答案 0 :(得分:3)

lapply(mylist, function(y) subset(y, x < 0.05))

答案 1 :(得分:3)

这样做的一种方法是使用lapply和您的子集代码作为函数。

由于mydf1[mydf1$x<0.05, ]将返回您感兴趣的子集,因此代码变为:

lapply(mylist, function(x)x[x$x<0.05, ])

[[1]]
  v          x
1 1 0.04792934
4 4 0.03654302

[[2]]
[1] v x
<0 rows> (or 0-length row.names)

[[3]]
[1] v x
<0 rows> (or 0-length row.names)

答案 2 :(得分:2)

您可能想要使用plyr包的llply函数。

library(plyr)
mylist1 = llply(mylist, subset, x<0.05)

mylist1

[[1]]
  v          x
1 1 0.04792934
4 4 0.03654302

[[2]]
[1] v x
<0 rows> (or 0-length row.names)

[[3]]
[1] v x
<0 rows> (or 0-length row.names)

答案 3 :(得分:0)

在您开始使用哪个函数开始问题时,我只是像使用其他函数一样将它们与lappy一起使用

lapply(mylist,function(y)y [which(y $ x> 0.05),])