2014-04-04 22 views
5

Tôi muốn biết nếu có bất kỳ chức năng nào giúp dễ dàng hình dung một đối tượng html trong ngăn người xem của RStudio. Ví dụ, tôi muốn biết nếu nó sẽ có thể xem một bảng html trong ngăn người xem.Có thể xem bảng HTML trong ngăn người xem không?

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

Tôi nghĩ bạn có thể chuyển đổi đối tượng của mình thành grob gridTable trong gói 'gridExtra' và vẽ đồ thị đó (xem http://stackoverflow.com/questions/15045396/r-suppressing-rownames-in-grid-table). –

+1

Mẹo hay nhưng đó không phải là bảng HTML. – PAC

Trả lời

6

Đây là một cách nhanh chóng để làm điều này trong 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") 

Nếu kable chức năng có thể trả về một đối tượng của lớp kable, sau đó người ta có thể đổi tên view_kable như print.kable trong trường hợp này chỉ đơn thuần gọi kable chức năng sẽ mở bảng trong trình xem. Nếu bạn cho rằng điều này hữu ích, vui lòng tiếp tục và gửi yêu cầu tính năng trên trang gitub knitr.

+1

Hoạt động tốt, mặc dù yêu cầu thay đổi rstudio :: viewer thành rstudioapi :: viewer – Pafnucy

4

thời gian gần đây tôi đã thêm chức năng này vào chức năng htmlTable() tôi trong Gmisc-package và chức năng khá đơn giản:

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 bạn nên sử dụng getOption ("người xem") thay vì @ Ramnath của đề nghị, các nguyên RStudio :: viewer(). Giải pháp của tôi cũng thêm utils :: browserURL() trong trường hợp bạn không sử dụng RStudio. Tôi đã có ý tưởng từ this bài đăng trên blog.

+0

Dường như [htmlTable] (https://cran.r-project.org/web/packages/htmlTable/index.html) là gói riêng của nó ngay bây giờ . –

1

Như đã giải thích trên this RStudio Support page, chính là để sử dụng tempfile():

Lưu ý rằng cửa sổ Viewer chỉ có thể được sử dụng cho nội dung web địa phương. Nội dung này có thể là các tệp HTML tĩnh được ghi vào thư mục tạm thời của phiên (tức là các tệp có đường dẫn được tạo bởi hàm tempfile ) hoặc một ứng dụng web chạy cục bộ.

Xem câu trả lời của tôi cho this question để có ví dụ hoàn hảo.

Các vấn đề liên quan