Jak określić typ geom każdej warstwy obiektu ggplot2?

W ramach starań o usunięcie określonego geom z już utworzonej działki (łącze SOtutaj) Chciałbym dynamicznie określić typ geom każdej warstwy obiektu ggplot2.

Zakładając, że nie znam kolejności dodawania warstw, czy istnieje sposób na dynamiczne znajdowanie warstw o ​​określonym geom? Jeśli wydrukuję warstwy, tak jak poniżej, widzę, że warstwy są przechowywane na liście, ale nie mogę uzyskać dostępu do typu geom.

library(ggplot2)
dat <- data.frame(x=1:3, y=1:3, ymin=0:2, ymax=2:4)
p <- ggplot(dat, aes(x=x, y=y)) + geom_ribbon(aes(ymin=ymin, ymax=ymax), alpha=0.3) + geom_line()
p$layers

[[1]]
mapping: ymin = ymin, ymax = ymax 
geom_ribbon: na.rm = FALSE, alpha = 0.3 
stat_identity:  
position_identity: (width = NULL, height = NULL)

[[2]]
geom_line:  
stat_identity:  
position_identity: (width = NULL, height = NULL)

Nie znam przedmiotów proto i rzeczy, które próbowałem z protodokumentacja nie działa (np.p$layers[[1]]$str()).

Dzięki poniższym odpowiedziom udało mi się stworzyć funkcję, która usuwa warstwę dynamicznie:

remove_geom <- function(ggplot2_object, geom_type) {
  layers <- lapply(ggplot2_object$layers, function(x) if(x$geom$objname == geom_type) NULL else x)
  layers <- layers[!sapply(layers, is.null)]

  ggplot2_object$layers <- layers
  ggplot2_object
}

questionAnswers(3)

yourAnswerToTheQuestion