grepl dans R pour trouver des correspondances à l'une des listes de chaînes de caractères

Est-il possible d'utiliser un grepl argument en se référant à une liste de valeurs, peut-être à l'aide de l' %en% de l'opérateur? Je veux prendre les données ci-dessous et si le nom d'animal a du "chien" ou "chat", je veux revenir à une certaine valeur, disons, de "garder"; si elle n'a pas de "chien" ou "chat", je tiens à revenir sur "ignorer".

data <- data.frame(animal = sample(c("cat","dog","bird", 'doggy','kittycat'), 50, replace = T))

Maintenant, si je devais juste pour ce faire, strictement correspondance des valeurs, disons, "chat" et "chien", je pourrais utiliser l'approche suivante:

matches <- c("cat","dog")

data$keep <- ifelse(data$animal %in% matches, "Keep", "Discard")

Mais l'utilisation de grep ou grepl ne se réfère qu'au premier argument dans la liste:

data$keep <- ifelse(grepl(matches, data$animal), "Keep","Discard")

retourne

Warning message:
In grepl(matches, data$animal) :
  argument 'pattern' has length > 1 and only the first element will be used

Remarque, j'ai vu ce fil dans ma recherche, mais cela ne fonctionne pas:
grep à l'aide d'un personnage vectoriel avec plusieurs modèles

source d'informationauteur Marc Tulla | 2014-08-19