2016-12-17 61 views
1

下面是這種情況:更新文本多操作按鈕 - R的閃亮

我有一個名爲被調用函數生成stories數據幀說,以下類型的abc()

X1 X2 X3 X4 X5 
1 a e i m q 
2 b f j n r 
3 c g k o s 
4 d h l p t 

現在我已經給在ui.r 5操作按鈕說(行動1,...,行動5)

現在,當用戶選擇操作1我想顯示stories[,1]同樣,對於其他類似行動5個顯示stories[,5]

要做到這一點我寫了If聲明不幸的是這僅產生基於值僅什麼是去年我在去年if條件

下面是server.R代碼:

shinyServer(
    function(input,output,session){ 
      abc() 
    terms<-reactive({ 
     if(input$analyse5){ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Analyzing") 
      stories[,5] 
     }) 
     })} 
     if(input$analyse4){ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Analyzing") 
      stories[,4] 
     }) 
     })} 
    if(input$analyse3){ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Analyzing") 
      stories[,3] 
     }) 
     })} 
    if(input$analyse2){ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Analyzing") 
      stories[,2] 
     }) 
     })} 
    if(input$analyse1){ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Analyzing") 
      stories[,1] 
     }) 
     })} 
    }) 

    output$text1<-renderUI({ 
     HTML(paste(h2(terms()[1]),terms()[2],terms()[3],terms()[4],sep='<br/><br/>')) 
    }) 
    } 
) 

首先只當我按下第一個動作按鈕時,它會觸發[a,b,c,d]如果首先按下任何其他動作按鈕,則不會產生任何內容,類似於按下第一個動作按鈕後,其他動作按鈕不會在故事中顯示相應的列,即說動作2不會給出stories[,2]=[e,f,g,h] inste廣告仍是一樣的[a,b,c,d]理想,這意味着按鈕都沒有反應

下面是供您參考ui.r還有:使用修改後的代碼observeEvent

節嘗試:

shinyUI(
    fluidPage((
    titlePanel('Some Headline')), 
    sidebarLayout(
     sidebarPanel(
     actionButton("analyse1","Action 1"), 
     actionButton("analyse2","Action 2"), 
     actionButton("analyse3","Action 3"), 
     actionButton("analyse4","Action 4"), 
     actionButton("analyse5","Action 5") 
     ), 
    mainPanel(
     h4(htmlOutput("text1")) 
    )))) 

編輯:

terms<-reactive({ 
     observeEvent((input$analyse5),{ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Loading 5th Article...") 
      stories[,5] 
     }) 
     })}) 
     observeEvent((input$analyse4),{ 
     isolate({ 
     withProgress({ 
      setProgress(message = "Loading 4th Article...") 
      stories[,4] 
     }) 
     })}) 

這是改善的情況:早些時候我可以看到所有的動作按鈕都在執行simult毫無意義地(每個場景觸發的Progress消息)現在我只看到按鈕上的按鈕進度消息,但是無法獲得輸出,它仍然是第一個。

請幫助一些代碼示例。

更新:當我添加print(stories [,5])或print(stories [,4])時,它會在控制檯上打印各個按鈕的點擊,但不會在Shiny App上。

+0

我建議定義與'reactiveValues'一個對象,然後讓每個綁定到'observeEvent',其中的每一個修飾的反應性值適當 – Benjamin

+0

感謝@Benjamin的答覆的acroom按鈕,我奮力有一點,你能給我寫一些可以幫助的虛擬代碼嗎?再次感謝 –

回答

2

這裏有一個完整的工作程序。我剛接到一臺電腦,所以我無法儘快提交。如果您仍然覺得有用,我會提交。

library(shiny) 

stories <- matrix(letters[1:20], byrow = FALSE, nrow = 4) 

shinyApp(
    ui = 
    shinyUI(
     fluidPage(
     titlePanel('Some Headline'), 
     sidebarLayout(
     sidebarPanel(
      actionButton("analyse1","Action 1"), 
      actionButton("analyse2","Action 2"), 
      actionButton("analyse3","Action 3"), 
      actionButton("analyse4","Action 4"), 
      actionButton("analyse5","Action 5") 
     ), 
     mainPanel(
      h4(htmlOutput("text1")) 
     ) 
    ) 
    ) 
), 

    server = 
    shinyServer(function(input, output, session){ 
     Terms <- reactiveValues(
     Selection = 1 
    ) 

     # using an observe block lets us listen for multiple events 
     # without having to rewrite the code five times 
     observe({ 
     lapply(sprintf("analyse%s", 1:5), 
       function(x) 
       { 
       observeEvent(input[[x]], 
           Terms$Selection <- as.numeric(sub("analyse", "", x))) 
       }) 
     }) 

     output$text1<-renderUI({ 
     HTML(paste(stories[, Terms$Selection],collapse='<br/><br/>')) 
     }) 

    }) 
) 
+0

謝謝@Benjamin你真棒:) –

1

與@Benjamin提示我能解決這個問題:

這裏是工作(採樣代碼)的變化:

terms<-reactiveValues(dta = NULL) 

observeEvent(input$analyse1,{ 
      withProgress({ 
       setProgress(message = "Loading 1st Article...") 
      terms$dta<-stories[,1] 
      }) 
      }) 
+0

是的,這是我推薦的方法。 – Benjamin