2014-04-04 9 views
5

Vorrei sapere se esiste una funzione che renda facile la visualizzazione di un oggetto html nel riquadro di visualizzazione di RStudio. Ad esempio, vorrei sapere se sarebbe possibile visualizzare una tabella html nel riquadro del visualizzatore.È possibile visualizzare una tabella HTML nel riquadro del visualizzatore?

library("Quandl") 
library("knitr") 
df <- Quandl("FBI_UCR/USCRIME_TYPE_VIOLENTCRIMERATE") 
kable(head(df[,1:9]), format = 'html', table.attr = "class=nofluid") 
+1

Penso che tu possa convertire il tuo oggetto in una grigliaTable grob nel pacchetto 'gridExtra' e tracciare quello (vedi ad esempio http://stackoverflow.com/questions/15045396/r-suppressing-rownames-in-grid-table). –

+1

Bel trucco ma non è un tavolo HTML. – PAC

risposta

6

Ecco un modo veloce per fare questo in RStudio

view_kable <- function(x, ...){ 
    tab <- paste(capture.output(kable(x, ...)), collapse = '\n') 
    tf <- tempfile(fileext = ".html") 
    writeLines(tab, tf) 
    rstudio::viewer(tf) 
} 
view_kable(head(df[,1:9]), format = 'html', table.attr = "class=nofluid") 

Se la funzione kable può restituire un oggetto della classe kable, allora si potrebbe rinominare view_kable come print.kable nel qual caso semplicemente chiamando il kable la funzione aprirebbe la tabella nel visualizzatore. Se ritieni che ciò sia utile, vai avanti e invia una richiesta di funzione sulla pagina github knitr.

+1

Funziona bene, sebbene richieda la modifica di rstudio :: viewer in rstudioapi :: viewer – Pafnucy

4

ho recentemente aggiunto questa funzionalità per la mia funzione htmlTable() nel Gmisc-package e la funzione è piuttosto semplice:

print.htmlTable<- function(x, useViewer = TRUE, ...){ 
    # Don't use viewer if in knitr 
    if (useViewer && 
     !"package:knitr" %in% search()){ 

    htmlFile <- tempfile(fileext=".html") 
    htmlPage <- paste("<html>", 
         "<head>", 
         "<meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\">", 
         "</head>", 
         "<body>", 
         "<div style=\"margin: 0 auto; display: table; margin-top: 1em;\">", 
         x, 
         "</div>", 
         "</body>", 
         "</html>", sep="\n") 
    cat(htmlPage, file=htmlFile) 

    viewer <- getOption("viewer") 
    if (!is.null(viewer) && 
      is.function(viewer)){ 
     # (code to write some content to the file) 
     viewer(htmlFile) 
    }else{ 
     utils::browseURL(htmlFile) 
    } 
    }else{ 
    cat(x) 
    } 
} 

RStudio recommends di utilizzare il getOption ("viewer") al posto di @ suggerimento di Ramnath, il grezzo RStudio :: viewer(). La mia soluzione aggiunge anche utils :: browserURL() nel caso in cui non si utilizzi RStudio. Ho avuto l'idea dal post del blog this.

+0

Sembra che [htmlTable] (https://cran.r-project.org/web/packages/htmlTable/index.html) sia il proprio pacchetto ora . –

1

Come è stato spiegato sul this RStudio Support page, la chiave è quella di utilizzare tempfile():

Nota che il riquadro Viewer può essere utilizzato solo per i contenuti web locale. Questo contenuto può essere sia file HTML statici scritti nella directory temporanea della sessione (ovvero file con percorsi generati dalla funzione tempfile ) o un'applicazione Web eseguita localmente.

Vedere la risposta a this question per un esempio di nudo.

Problemi correlati