如何在R Shiny App

时间:2017-12-06 01:01:45

标签: r shiny

在我的闪亮应用程序中,我正在尝试创建一个超链接,根据用户所在应用程序的当前选项卡,打开一个从R Markdown文件创建的html文件到某个部分。

以下是我正在使用的ui和服务器代码的摘录。

ui <- fluidPage(title = "App Title",
                dashboardPage(title = "App Title",
                              dashboardHeader(tags$li(a(href = paste0('Help_File.html', textOutput(page), target="_blank", icon("question"), title = "Help"), class = "dropdown")),
                              dashboardSidebar(sidebarMenu(id = "tabs",
                                                           menuItem(text = 'Tab 1', tabName = 'tab1'),
                                                           menuItem(text = 'Tab 2', tabName = 'tab2'),
                                                           menuItem(text = 'Tab 3', tabName = 'tab3')
                                                           )
                                               )

server <- function(input, output, session) {

                   output$page <- renderText({
                                  if(input$tabs == 'tab1') {'#page_1'}
                                  else if (input$tabs == 'tab2') {'#page_2'}
                                  else if (input$tabs == 'tab3') {'#page_3'}
                                  else ''
                                             })
                                            }

当我运行应用程序时,我收到错误“错误:无法强制类型'封闭'到'字符'类型的向量'”。如果我在ui中的page函数中放置textOutput周围的单引号,则应用程序会运行,但文件无法打开。我认为textOuput函数错误或服务器中的renderText函数错误但我不确定正确的语法是什么。

1 个答案:

答案 0 :(得分:1)

你的问题是renderText不只是将文本作为输出,而是一个完整的html对象。在这种情况下,您希望将renderUI用于完整的a对象。并让href在此内动态生成。喜欢这个

library(shiny)
library(shinydashboard)
ui <- fluidPage(title = "App Title",
                dashboardPage(title = "App Title",
                              header = dashboardHeader(tags$li(uiOutput("page"), class = "dropdown")),
                              sidebar = dashboardSidebar(sidebarMenu(id = "tabs",
                                                           menuItem(text = 'Tab 1', tabName = 'tab1'),
                                                           menuItem(text = 'Tab 2', tabName = 'tab2'),
                                                           menuItem(text = 'Tab 3', tabName = 'tab3')
                                                           )
                                               ),
                              body = dashboardBody(div())
                )
)
server <- function(input, output, session) {
  output$page <- renderUI({
    a(href = paste0(
      'Help_File.html', 
      if(input$tabs == 'tab1') {'#page_1'}
      else if (input$tabs == 'tab2') {'#page_2'}
      else if (input$tabs == 'tab3') {'#page_3'}
      else ''), 
      target="_blank", 
      style = "color:#FFF;",
      icon("question"), 
      title = "Help",
      "Help")
  })
}

shinyApp(ui,server)

希望这有帮助!