¿Cómo subcontratar data.frames almacenados en una lista?

Creé una lista y almacené un marco de datos en cada componente. Ahora me gustaría filtrar esos marcos de datos manteniendo solo las filas que tienen NA en una columna específica. Me gustaría que el resultado de esta operación sea otra lista que contenga marcos de datos con solo aquellas filas que tengan NA en esa columna.

Aquí hay un código para aclarar lo que estoy diciendo. Asumird1 yd2 son mis marcos de datos

set.seed(1)

d1<-data.frame(a=rnorm(5), b=c(rep(2006, times=4),NA))
d2<-data.frame(a=1:5, b=c(2007, 2007, NA, NA, 2007))  

print(d1)
 a    b
 1.3011543 2006
 0.3780023 2006
-0.3101449 2006
-1.3927445 2006
-1.0726218   NA

print(d2)
a    b
1 2007
2 2007
3   NA
4   NA
5 2007

que pongo en una lista con un bucle for

ls<-list()

for (i in 1:2){ 

  str<-paste("d", i, sep="")
  dat<-get(str)
  ls[[str]]<-dat

}

Ahora me gustaría filtrar cada componente de la lista para dejar solo las filas de la columna b que contienen NA. Para hacer esto intenté usar el siguiente comando, sabiendo desde el principio que habría fallado. Mi problema es que no se sisubset() es la función correcta para usar y, en caso de que lo sea, no sé cómo calificar cada marco de datos (es decir, el primer elemento de la función de subconjunto)

lsNA<-lapply(ls, subset(ls, is.na(b)))

¿Puedes ayudarme, por favor, a superar mis severas limitaciones?

Respuestas a la pregunta(2)

Su respuesta a la pregunta