Je rencontre actuellement un hoquet où j'essaie de créer une table de valeurs à partir de certains calculs en amont. En règle générale, j'ai supposé qu'il y aurait au moins une valeur de 1 chaque fois que ces trames de données sont créées; mais je l'ai rencontré un exemple où cela n'a pas été le cas, et a fini avec une table qui ressemble à ceci:tryCatch() ou exists() dans R gestion des erreurs de la chaîne de tuyau
df <- data.frame(
Experiment_Batch = c(rep("008_1", 83),
rep("008_6", 82),
rep("520_0", 2),
rep("944_10", 84),
rep("944_8", 85),
rep("944_9", 72)),
Overall = rep(0, 408)
)
Cela a provoqué le traitement en aval suivant:
df %>%
dplyr::count(Experiment_Batch, Overall) %>%
tidyr::spread(Overall, n, fill = 0) %>%
dplyr::select(Experiment_Batch, `1`)
à l'erreur out: Error in overscope_eval_next(overscope, expr) : object '1' not found
.
J'ai essayé d'utiliser tryCatch()
et exists()
, mais je n'arrive pas vraiment à les faire fonctionner correctement. Idéalement, tout cela serait manipulé avec élégance en utilisant des opérateurs de tuyauterie. Je sais déjà que je pourrais créer un objet et ajouter quelques déclarations d'if-else si nécessaire à mon flux de travail, mais je me demande s'il y a une façon «plus intéressante» de prendre soin de cela, donc je ne le ferais pas avoir à briser le travail.