在Shiny

时间:2017-01-21 21:18:21

标签: r shiny dt

我想在data.table的一列中包含一个本地html文件的链接,该文件位于我的闪亮应用程序的www目录中。单击时,应打开一个新选项卡,显示html文件。 我找到了链接到网页的解决方案,但是如何调整它,以便Shiny在浏览器中呈现时找到本地文件?

这是我的代码

library(DT)
library(shiny)

link <- "www/my_html.html"
link <- paste0("<a href='", link,"' target='_blank'>", link,"</a>")  # works fine for global url, but not for local file
df <- data.frame(a = 10.5, b = 48, link = link)

ui <- fluidPage(
  DT::dataTableOutput('table1')
)

server <- function(input, output) {
  output$table1 <- DT::renderDataTable({df}, escape = -3)
}

shinyApp(ui, server)

2 个答案:

答案 0 :(得分:2)

也许您可以尝试使用闪亮的文件夹来运行您的应用。确保您的my_html.html文件位于闪亮文件夹中的www文件夹中。

ui.R

library(DT)
library(shiny)

fluidPage(
  DT::dataTableOutput('table1')
)

server.R

library(DT)
library(shiny)

df <- data.frame(a = 10.5, b = 48, link = "<a href='my_html.html' target='blank' >MyFile</a>")

function(input, output) {
  output$table1 <- DT::renderDataTable({df}, escape = FALSE)
}

答案 1 :(得分:0)

我认为代码的主要问题是您将html文件的地址指定为link <- "www/my_html.html"。您应该退出www/

的确,在您的应用程序目录中必须有一个www目录,并且html文件应位于该www目录中。但是要正确处理文件,您应该考虑使用工作目录已经在www /目录中。

如果您在单个app.R文件中拥有闪亮的应用程序,或者ui.R + server.R的组合都没有关系,那么两种方法都可以。

其他详细信息在escape函数的renderDataTable()参数中。它不应等于-3,而应使用:DT::renderDataTable({df}, escape = FALSE)

因此,最终代码将如下所示(假设您有两个html文件):

library(shiny)

link <- c("my_html_1.html", "my_html_2.html")
link <- sprintf('<a href="%s" target="_blank">click_here</a>', link)

df <- data.frame(name = c("1st_file", "2nd_file"), 
    value = c(10.5, 48), 
    link = link)

ui <- fluidPage(
  dataTableOutput('table1')
)

server <- function(input, output) {
  output$table1 <- renderDataTable({df}, escape = FALSE)
}

shinyApp(ui, server)