在我的闪亮应用程序中,我正在尝试创建一个超链接,根据用户所在应用程序的当前选项卡,打开一个从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
函数错误但我不确定正确的语法是什么。
答案 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)
希望这有帮助!