【发布时间】:2017-05-03 07:04:37
【问题描述】:
这是场景:
我有一个名为 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 个动作按钮说 (Action 1,..., Action 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] 而是保持为 [a,b,c,d] 理想情况下这意味着按钮没有响应
以下是供您参考的 ui.r:
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"))
))))
编辑:尝试使用observeEvent
修改代码部分:
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]
})
})})
这改善了这种情况:之前我可以看到所有操作按钮同时执行(每个场景触发的进度消息)现在我在单击按钮时只看到相应的按钮进度消息,但无法为了得到输出,它仍然是第一个。
请提供一些代码示例。
更新:当我添加 print(stories[,5]) 或 print(stories[,4]) 时,它会在控制台上打印以供单击相应按钮,而不是在 Shiny 应用程序上。
【问题讨论】:
-
我建议用
reactiveValues定义一个对象,然后将每个acroom按钮绑定到observeEvent,每个按钮都相应地修改了响应值 -
感谢@Benjamin 的回复,我有点挣扎,你能帮我写一些虚拟代码吗?再次感谢