Je voudrais faire quelque chose comme une boucle incorporée, mais en utilisant des fonctions d'application, dont le but est de vérifier diverses conditions avant de passer à la partie suivante de mon programme .en cours apply (ou variant) comme une boucle intégrée
J'ai deux objets, une liste des descriptions de produits, qui peuvent être créées comme suit:
test_products <- list(c("dingdong","small","affordable","polished"),c("wingding","medium","cheap","dull"),c("doodad","big","expensive","shiny"))
et une trame de données de combinaisons de caractéristiques qui ne sont pas autorisés, où chaque ligne représente une combinaison refusée de fonctionnalités. Une trame de données d'échantillon peut être créé comme suit:
disallowed <- data.frame(trait1 = c("dingdong","wingding","doodad"),
trait2 = c("medium","big","big"),
stringsAsFactors = FALSE)
Mon but est de vérifier chaque produit par rapport à chacune des combinaisons non admises de manière aussi efficace que possible. Jusqu'à présent, je peux vérifier un produit contre toutes les interdictions suivantes (dans ce cas, le troisième produit):
apply(disallowed, 1, function(x) x %in% unlist(test_products[[3]]))
OU Je peux vérifier tous les produits contre l'une des combinaisons non admises de traits (la troisième combinaison).
lapply(test_products, function(x) disallowed[3,] %in% x)
Est-il possible de vérifier tous les produits contre toutes les lignes de la trame de données de combinaison de fonctions non reconnues, sans utiliser une boucle?
Mon résultat final devrait ressembler à ceci:
Product 1: OK
Product 2: OK
Product 3: NOT OK
Depuis Produit 3 va à l'encontre de la troisième rangée refusée.
Merci @ycw. Tu as raison que mon exemple était compliqué! Et je vais modifier ma question pour utiliser votre modification.Va tester votre réponse plus tard aujourd'hui –
Fonctionne bien! Je vous remercie. –