在我的闪亮输出中,我有一个DataTable。我有一个按钮(" Compute")和一个列表。我想要以下行为:
不知何故,我无法将自己的思绪包裹起来以实现这一目标。这是一个用来说明我的问题的基本代码:
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
(我是吗?)。当我启动闪亮的应用程序时,两个函数都被调用。当我点击&#34;计算&#34;时,没有任何反应。我不知道为什么。
这是对问题的另一种看法,部分解决方案 - 它有效,但有不必要的输出。我尝试使用reactiveValue。我定义了两个额外的UI元素,&#34; foo&#34;和&#34; bar&#34;。
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")
)
})
有更好的解决方案吗?
答案 0 :(得分:2)
您可能偶然发现了一些保留变量?不确定,我看到了一堆有关错误的行为,但是这样做,只是更改了UI变量名称
shinyServer(function(input, output,session) {
output$dummyoutput <- renderText({NULL})
output$results1 <- renderDataTable({NULL})
observe({
input$compute1
output$results1 <- renderDataTable({
mytab <- data.frame( ID=1:10, blah=letters[1:10] )
print("computing")
return(mytab)
})
})
observe({
input$reset1
print("resetting")
output$results1 <- renderDataTable({NULL})
})
})
答案 1 :(得分:0)
你可以使用带有两个选项的radioButton,&#34;计算&#34;和&#34;重置&#34;。根据输入的值,data.table显示或不显示。
output$results <- renderDataTable({
if ( input$radio == "compute" ) {
print('computing')
return(data.frame( ID=1:10, blah=letters[1:10] ) )
} else {
print("resetting")
return(NULL)
}
})