2016-12-17 62 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