【发布时间】:2015-07-30 09:44:43
【问题描述】:
在我闪亮的输出中,我有一个 DataTable。我有一个按钮(“计算”)和一个列表。我想要以下行为:
- 加载脚本时,使用 NULL 对象呈现数据表
- 当用户点击“计算”时,会显示一个数据表
- 当用户从列表中选择“重置”时,数据表被擦除
不知何故,我无法用闪亮的方式来实现这一目标。这是说明我的问题的基本代码:
server.R
server.fun <- function(input, output) {
output$results <- renderDataTable({
mytab <- data.frame( ID=1:10, blah=letters[1:10] )
input$compute
print("computing")
mytab
})
output$results <- renderDataTable({
input$reset
print("resetting")
NULL
})
}
ui.R
shinyUI({
basicPage(
actionButton("compute", "Compute"),
selectInput( "reset", "",
list("------"="",
"Do nothing"="nothing",
"Reset"="reset")
),
dataTableOutput( "results" )
)
})
很明显,它没有做我想做的事。我不认为我可以将两个反应函数连接到同一个对象output$results(我是吗?)。当我启动闪亮的应用程序时,两个函数都会被调用。然后当我点击“计算”时,什么也没有发生。我不知道为什么。
这是对这个问题的另一种看法,它部分是一种解决方案——它有效,但有不必要的输出。我尝试使用reactiveValue。我定义了两个额外的 UI 元素,“foo”和“bar”。
server.R
server.fun <- function(input, output) {
rv <- reactiveValues()
rv$mytab <- NULL
output$foo <- renderText({
input$compute
rv$mytab <- data.frame( ID=1:10, blah=letters[1:10] )
"computing"
})
output$bar<- renderText({
input$reset
rv$mytab <- NULL
"resetting"
})
output$results <- renderDataTable({
rv$mytab
})
}
ui.R
shinyUI({
basicPage(
actionButton("compute", "Compute"),
selectInput( "reset", "",
list("------"="",
"Do nothing"="nothing",
"Reset"="reset")
),
dataTableOutput( "results" ),
textOutput("foo"),
textOutput("bar")
)
})
有更好的解决方案吗?
【问题讨论】: