round redondear numero net midpointrounding hacia examples example ejemplos arriba abajo r latex sweave knitr

redondear - ¿Cómo evitar el uso de round() en cada / Sexpr{}?



redondear numero hacia arriba c# (3)

¿Hay alguna forma de evitar la función round() al usar Sweave / knitr? Es realmente molesto escribir round(,2) en cada /Sexpr{} . Me gustaría tener dos decimales en todo el documento.

Gracias por tu ayuda
Macs


En knitr , el knitr línea se puede usar para procesar la salida de las declaraciones de /Sexpr{} . Por lo tanto, si desea imprimir solo 2 dígitos después del decimal para el código en línea (dejando solo la opción de digits general), puede hacerlo así:

## First have a look at the default inline hook function knit_hooks$get("inline") ## Then customize it to your own liking inline_hook <- function(x) { if(is.numeric(x)) x <- round(x, 2) paste(as.character(x), collapse=", ") } knit_hooks$set(inline = inline_hook)


Primero, quizás quieras usar formatC lugar de round para obtener dos dígitos, incluso cuando son cero. No hay una gran manera de hacer esto en Sweave; la mejor opción es probablemente hacer una nueva función con un nombre corto que haga el formato que desea; algo como

p <- function(x) {formatC(x, format="f", digits=2)}

Eso al menos ahorra un poco de escritura:

The answer is $/Sexpr{p(x)}$.

Desafortunadamente, sin tener que preocuparme por un nuevo conductor de Sweave, no creo que haya otra cosa que hacer (tal vez esta sea otra razón para probar knitr , que parece estar ganando terreno rápidamente). Sweave está haciendo esto en lo que está dentro de tu declaración de Sexpr , y luego reemplaza la llamada de Sexpr con el resultado.

as.character(eval(parse(text = cmd), envir = .GlobalEnv))

Sin embargo, no puedes simplemente escribir una nueva versión de as.character ; Aparte del problema, podría cambiar el comportamiento de otras formas inesperadas, debido al espacio de nombre, siempre llama a la versión en base incluso si hay otra versión en el entorno global.


Si ha leído la motivación del paquete knitr , probablemente sepa que soy la persona que más odia round() dentro de /Sexpr{} . Le sugerí esto a R Core hace mucho tiempo para Sweave pero fue ignorado, así que comencé mi propio paquete.

Aunque la respuesta de Josh O''Brien es absolutamente correcta, debo decir que realmente solo necesita options(digits = 2) con knitr , y no es necesario restablecer el knitr línea predeterminado porque el knitr predeterminado respeta esta opción.