2012-06-01 25 views
9

He hecho una pregunta sobre how to export a HTML table in R and have control over line borders.¿Cómo producir tablas HTML y el CSS que lo acompaña usando R Markdown o HTML Sweave?

Estoy acostumbrado a LaTeX, donde cuando se crea una tabla, el formato de la tabla está determinado en gran medida por el texto y el marcado que aparece en ese punto. Esto funciona bien para Sweave, porque su fragmento de código R puede generar el marcado de la tabla LaTeX en ese punto. También entiendo que hay herramientas como xtable que pueden producir etiquetas HTML para una tabla.

Sin embargo, el control sobre las tablas HTML parece depender de hojas de estilo, que deben aparecer en el encabezado del documento y no en la ubicación donde se coloca el fragmento de código R. Por supuesto, podría simplemente poner contenido en la hoja de estilos, pero en las aplicaciones científicas a menudo puede haber un formato de tabla bastante específico que varía en algunos aspectos de una tabla a otra.

Por lo tanto, mi pregunta:

  • En general, ¿cómo dar formato a una tabla HTML con la programación literaria como R de rebajas o incluso de HTML puro, si el formato de la salida requiere de salida que se creará en un lugar separado en el documento (es decir, CSS para la tabla en el encabezado) a donde se coloca el fragmento de código R (es decir, la tabla misma en el cuerpo)?
+0

Dando una clase a la tabla y teniendo un CSS específico de la clase. Agregue una contra muestra si esta solución no debe resolver el problema. –

+0

@Dieter Me doy cuenta de que esa es una solución. La pregunta que tengo es ¿cómo se obtiene el CSS específico de la clase del bloque de código R en el encabezado en un documento de R Markdown o HTML Sweave? Estoy interesado en cómo podrías hacerlo y aún más interesado en cómo hacerlo de una manera elegante y directa. –

+0

a) Rápido y sucio: con cat. b) Para trabajos serios: con una plantilla de preparación. –

Respuesta

5

puedo pensar en tres maneras sin jugar con su cadena de herramientas, todos ellos son tipo de hacky.

  1. Acaba de salir el <style> directamente en el cuerpo. Esto no es técnicamente válido, pero funcionará bien en cualquier navegador importante.

  2. Emitir JavaScript que crea un bloque <style> en tiempo de ejecución y lo agrega a la cabeza (here's unidireccional). Esto se verá un poco asqueroso en la fuente HTML y en el código R, pero funcionará y se validará.

  3. Utilice un scoped style block. Esto sería exactamente lo que está buscando, excepto que el atributo de alcance es nuevo en HTML5 y aún no se implementó en ningún navegador importante. Sin embargo, si basa sus estilos en ID generados de manera única (es decir, sus reglas están escritas de tal manera que incluso si se aplican al documento completo no arruinarán nada), me imagino que los navegadores simplemente ignorarán el atributo "con alcance" y todo funcionará correctamente - ¡entonces esto se convierte efectivamente en una versión de la opción 1 que pasa a validar!

(Me gustaría ir con # 3, personalmente.)

Si no lo ha hecho, valdría la pena iniciar un hilo en el foro de soporte rstudio sobre esto; a pesar de que no es estrictamente un tema de RStudio, obviamente estamos trabajando mucho en el escenario extremo a extremo de publicar informes en R Markdown y nos encantaría obtener más información sobre sus ejemplos específicos. Las tablas claramente serán una gran parte de lo que las personas harán con estos informes y sabemos que este es un punto débil en este momento, uno que queremos abordar en futuras versiones.

+0

Hola Joe, es genial ver lo rápido que RStudio ha estado innovando. Me has dado algunas buenas opciones para explorar. –

1

Ok, espero que lo tengo ahora. Debería establecer algunas opciones de Knitr adicionales, y podría cat() el CSS de forma dinámica si lo desea.

<!DOCTYPE html> 
<head> 
<style type="text/css"> 
.greenback { 
    background-color: teal; 
    color: white; 
} 
.greenback td { 
    border: dotted gray; 
} 
.bluescreen { 
    background-color: blue; 
    color: white; 
} 
.bluescreen td { 
    border: thick solid; 
    padding:2px; 
    margin:2px; 
} 

</style> 
</head> 

<body> 
<table class="greenback"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 

Could use some xtable code here instead. 

<!--begin.rcode 
cat(' 
<table class="bluescreen"> 
<tr><td>Hello</td><td>Mars</td><tr> 
<tr><td>World</td><td>Moon</td><tr> 
</table> 
') 
    end.rcode--> 

</body> 
</html> 
+0

+1 Gracias por esto. Supongo que estoy buscando una manera de incluir la información de estilo en el cuerpo para que una función R pueda escribir tanto la información de estilo como el texto de la tabla en un documento de R Markdown. gvisTable parece hacer un poco de esto usando scripts. –

2

Un método alternativo sería utilizar pander como backend R de reducción del precio (lo siento por esta respuesta similar a la comercialización, pero yo creo que mi función Pandoc.brew podría ser realmente útil para este propósito).

Es similar a knitr (análisis sintáctico/evaling R comandos en un archivo con formato de reducción del precio) pero utilizando brew sintaxis para bloques de código R (por ejemplo <%...%> para el código R en general - como bucles etc. y <%=...%> para el retorno de los resultados en un bloque) . Pero difiere de brew como Pandoc.brew no solo cat da como resultado un bloque de código, sino que ejecuta mi método genérico pander que transforma (bastante q una gran variedad de) objetos R en (mi humilde opinión) el formato de marcación de Pandoc.

Entonces, ejecutar Pandoc.brew en un archivo de rebajas formateado se traduciría en un archivo de rebajas limpia con todos los bloques de código R correr - y usted no tiene que lidiar con xtable y otros ajustes (ni siquiera con parcelas como todos los bloques de código R resultando en una imagen se procesa en un archivo png y se vincula en el archivo de texto de reducción).

Y sobre por qué empecé a responder aquí: con pander puede pasar opciones especiales al pandoc, p. Ej. agregar una hoja de estilos CSS personalizada (o JS, etc.) al encabezado de HTML generado, consulte los detalles en Pandoc's homepage. En función de eso, podría agregar fácilmente su (s) archivo (s) CSS o incluso solo un montón de parámetros de estilo. Esto se puede hacer en pander con Pandoc.convert 's option. Por cierto, ni siquiera tiene que usar mi función de horquilla brew, , puede generar su archivo de descuento con, p. knitr y llame a Pandoc con la función anterior.

pander agrega un poco de CSS/JS a los archivos HTML generados, lo que generaría una salida bastante bonita (IMHO), pero puede personalizar fácilmente eso y agregar allí sus propios archivos.

Por ejemplo: se podrían obtener con base this HTML filethis markdown por defecto que fue Pandoc.brew ed de esta bastante corto markdown syntax brew file. BTW my github page también fue generado/estilo automático por mi analizador de rebajas. Realmente agradecería si desea probarlo :)


NOTA: para tratar las llamadas anteriores que se necesitan Pandoc pre-instalado, también se necesitaría una puesta al día de la versión ambos rapport, ambospander. Ver installation details.

2

Una opción que no resuelve completamente el problema es utilizar gvisTable:

Aquí es una gvisTable básica:

```{r message=FALSE} 
# install.packages("googleVis") 
library(googleVis) 
library(MASS) 
data(Animals) 
``` 

```{r results='asis'} 
tab1 <- gvisTable(Animals, 
        options = list(width = 600, height = 650, 
            page = "enable", 
            pageSize = nrow(Animals))) 
print(tab1, "chart") 
``` 
  • ?print.gvis explica algunas de las opciones para imprimir el objeto gvis.
  • En partiuclar se requiere la opción tag="chart" para los documentos R Markdown ya que esto significa que el resultado es justo lo que se requiere para el objeto, en lugar de una página HTML completa como es el valor predeterminado.
  • Véase el output of this and a little more here
+0

Al probar un ejemplo de este tipo, LaTeX ya no funciona. –

1

Neil Saunders tiene un tutorial en customising CSS for HTML generated using RStudio. Muestra cómo puede modificar el archivo de estilo incorporado y generar este archivo alternativo.

+0

Eso parece muy bonito, pero no entiendo cómo hacer el archivo 'custom.css'. ¿Dónde debemos incluir las modificaciones del archivo 'markdown.css'? –

+0

Al leer el tutorial, parece que (a) crea un nuevo archivo css en el directorio de trabajo, (b) usa el argumento 'stylesheet' en la función' markdownToHTML' con el valor del nombre del archivo css. –

+0

Sí, pero el tutorial dice que tenemos que modificar el archivo 'markdown.css'. Muestra estas modificaciones, pero yo sé dónde incluir estas modificaciones. Al comienzo del archivo? Al final ? El lenguaje de estas modificaciones no se parece al lenguaje del archivo 'markdown.css', por lo tanto, ni siquiera entiendo por qué se llaman modificaciones. –

Cuestiones relacionadas