2011-09-07 57 views
3

我有一个包含2000个组件数据框的大型列表。以下仅仅是一个例子:R:在列表中应用函数

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的值小于< 0.05(每个列表中的组件内)到子集此整个列表和创造一个新的列表。

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

不工作....请帮助。谢谢...

+1

见申请,sapply,lapply和tapply???学习它们,练习它们。你不会后悔的。 –

回答

2

的一种方法是使用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) 
+0

作品...谢谢... –

3

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

+0

是的,这是我想要的,谢谢.. –

2

您可能需要使用llply plyr包的功能。这样做的

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) 
+0

+1 plyr是不适合这个问题,但非常有用的知道一个R初学者。 –

+0

works ..谢谢... –