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.