¿Es recomendable utilizar las funciones check * de RUnit para hacer declaraciones de precondiciones/postcondición o hacer esto con alguna penalidad en el rendimiento u otro?¿Cómo hacer afirmaciones en R?
10
A
Respuesta
4
Sé que esta es una publicación anterior, pero quizás esta respuesta sea útil para otros que busquen afirmaciones R en forma de operador. Esto podría ser un paso en la dirección correcta si desea virar una afirmación al final de una declaración problemática.
"%assert%" <- function(e1, e2)
{
args <- as.list(match.call()[-1])
defs <- as.list(args$e1)
preds <- as.list(args$e2)[-1L]
for(var in names(defs)[names(defs) != ""]) assign(var, eval(defs[[var]]))
for(p in unlist(preds)) eval(
parse(
text = paste0("if(!", deparse(p), ") stop('assertion ",deparse(p) , " is not true')")
)
)
return(eval(args$e1))
}
Ejemplo: si está calculando la media de un vector x y quiere asegurarse de que cada elemento es de entre uno y diez podría utilizar
mean(x = sample(1:10, size = 100, replace = T)) %assert% c(min(x) > 0 && max(x) < 11)
#5.62
Si esta condición ISN' t que verdadera, obtendrá una (o menos) de error informativo, como
mean(x = sample(11:20, size = 100, replace = T)) %assert% c(min(x) > 0, max(x) < 11)
#Error in eval(expr, envir, enclos) : assertion max(x) < 11 is not true
es completamente probado, a fin de utilizar a su propio riesgo!
20
Siempre uso stopifnot()
para las aserciones.
Cuestiones relacionadas
- 1. afirmaciones JUnit: hacer la afirmación entre flotantes
- 2. Cómo hacer introspección en R
- 3. Afirmaciones en JavaScript
- 4. ¿Qué ... = ... hacer en R?
- 5. R. cómo hacer una lista de listas en R?
- 6. Python + nose: hacer afirmaciones sobre el texto registrado?
- 7. ¿Dónde poner las afirmaciones?
- 8. cómo poner las afirmaciones de código Ruby
- 9. ¿Cómo puedo evitar múltiples afirmaciones en esta prueba unitaria?
- 10. Hacer gifs animados usando R
- 11. Cómo puedo habilitar las afirmaciones de java en Tomcat
- 12. ¿Cómo prevenir que gcc optimice algunas afirmaciones en C?
- 13. ¿Cómo hacer enrejado xyplot() en escala de grises en R?
- 14. Cómo hacer expresiones regulares complejas en list.files en R
- 15. ¿Hay demasiadas afirmaciones en esta prueba unitaria?
- 16. ¿Cómo evitar las afirmaciones múltiples en una prueba JUnit?
- 17. Cómo encontrar afirmaciones 'enmascarados' en MS Código Contratos
- 18. ¿Cómo puedo hacer una variable ficticia en R?
- 19. ¿Cómo hacer gráficos con fondo transparente en R usando ggplot2?
- 20. Cómo hacer una lista de vectores enteros en R
- 21. Hacer buenos nombres de columna R
- 22. ¿Por qué las afirmaciones "continuar" son incorrectas en JavaScript?
- 23. ¿Cómo puedo hacer que R lea mis variables ambientales?
- 24. Carga de archivos: ¿cómo excluir un tipo MIME utilizando afirmaciones?
- 25. NUnit: La ejecución de varias afirmaciones en una sola prueba
- 26. Controlando las Afirmaciones de Java - Mejores Prácticas
- 27. Dos afirmaciones al lado del corsé en una ecuación
- 28. ¿Cómo hacer que R use todos los procesadores?
- 29. oracle: ¿qué afirmaciones se deben comprometer?
- 30. Hacer un operador de concatenación de cadenas en R
Secundado. Es fácil, está claro, está en R Base y con eso es omnipresente. –
pero sufre legibilidad. Quiero explicar por qué falló la precondición y verificar * es simplemente hermoso _checkEquals (a, b, "a debe ser b") _ –
Alternativamente, usar 'if' +' stop' permite verificar una condición y dar un mensaje de error. – nico