R: применение функции внутри списка - PullRequest
4 голосов
/ 07 сентября 2011

У меня большой список с 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, которое меньше <0,05 (внутри каждого компонента списка), и создать новый список. </p>

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

не работает .... помогите пожалуйста. Спасибо ...

Ответы [ 3 ]

3 голосов
/ 07 сентября 2011

Один из способов сделать это - использовать 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)
3 голосов
/ 07 сентября 2011

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

2 голосов
/ 07 сентября 2011

Возможно, вы захотите использовать функцию 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...