2017-12-06 19 views
0

私の光り輝くアプリでは、R Markdownファイルから作成されたhtmlファイルを現在のタブに基づいて特定のセクションに開くハイパーリンクを作成しようとしています。ユーザーが使用しているアプリR Shiny Appで可変ハイパーリンクを作成する方法

ここでは、私が使用しているユーザーコードとサーバーコードの抜粋を示します。私はアプリを実行すると

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 '' 
              }) 
              } 

、私はエラー「ERROR: 『を文字』タイプのベクトルにタイプ 『閉鎖』を強制することはできません」を取得します。私がpageの周りに一重引用符を入れた場合、uplのtextOutput関数では、アプリケーションは実行されますが、ファイルは開かれません。私はtextOuput関数が間違っているか、サーバーのrenderText関数が間違っていると思いますが、正しい構文は何か分かりません。

+0

あなたは 'shiny :: downloadLink'を見ましたか? –

+0

標準のhref * –

+0

には 'shiny :: a'もあります。いずれかの場合、リンクは可変文字列にできますか? – mosk915

答えて

1

あなたの問題はrenderTextだけで、出力としてテキストではなく、完全なHTMLオブジェクトを持っていないということです。この場合、aオブジェクトにはrenderUIを使用します。そして、この中で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) 

希望します。

+0

ありがとう、これはトリックでした! 1つの副作用は、アイコンがダッシュボードヘッダーの右上に表示され、右に少しのスペースがあり、上から下に中央に配置されているようです。私は余白を定義することによってそれを左にシフトすることができますが、ヘッダーの中央にそろえるようにそれを戻すために使用できるものはありますか? – mosk915

+1

これは最善の方法ではありませんが、 'class =" dropdown "の後に' style = "vertical-align:middle; line-height:50px;" 'をオブジェクトに追加することができます –

+0

私のために働きます。再度、感謝します! – mosk915

関連する問題