我想在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)
答案 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)