подстановка элементов списка элементами другого списка - PullRequest
0 голосов
/ 17 сентября 2018

Давайте предположим, что у меня есть список из четырех data.frames, содержащих некоторые значения NA:

my.list<-replicate(4,data.frame())
names(my.list)<-paste0("Frame.Number", c(1:4))
for (i in 1:4){
  my.list[[i]]<-mapply(rnorm,10,c(1:4))
  my.list[[i]][i+1,3]<-NA
  my.list[[i]][c(i,i*2),4]<-NA
}

Для каждого из data.frames я хочу выбрать те строки, которые не содержат NA в4 колонка.Я могу, например, создать список векторов (?), Содержащий информацию о полноте дел в каждом data.frame:

selector <- lapply(my.list,"[",, 4)
selector <- lapply(selector,complete.cases)

Теперь это то, где я застрял: как применитьselector список к списку my.list, чтобы выбрать только полные дела?Я думал, что смогу снова использовать lapply, но не могу понять какой-то значимый синтаксис.

1 Ответ

0 голосов
/ 17 сентября 2018

Мы можем lapply над списком, выбрать 4-й столбец и получить индекс значений, отличных от NA, и соответствующим образом установить матрицу.

lapply(my.list,function(x) x[!is.na(x[,4]), ])

#$Frame.Number1
#           [,1]       [,2]     [,3]     [,4]
#[1,]  0.3668229  2.0688573 2.466580 4.339755
#[2,] -0.6391422  3.2635271 2.011809 3.296089
#[3,]  0.8662670  2.2797301 4.838563 4.443876
#[4,] -0.8972108  2.9305257 3.461650 5.525453
#[5,] -0.3452349 -0.2211153 2.570717 3.915671
#[6,]  0.6464616  2.3472838 4.009406 3.436188
#[7,]  0.9341354  2.3092428 2.338770 4.359324
#[8,] -0.5652311  3.2143472 1.944220 4.042566

#$Frame.Number2
#            [,1]      [,2]     [,3]     [,4]
#[1,]  0.22304364 2.6085569 3.459335 2.575920
#[2,] -0.08987518 2.9515099       NA 3.775579
#[3,]  2.03265254 0.9405609 3.266783 4.009509
....
...