我正在从Excel工作表中读取代码,并使用表格生成网站,以便用户可以输入数据。该数据基于底层向量生成其他图形。但是,每当我运行它时,它就会非常慢并且运行多次。通常,在用户界面中使用rHandsontableOutput("tbl")
会生成一个表,但不在操作按钮的控制下。这是一个I / O经济分析工具。
我对output$(something)
的参数如何工作不太熟悉。我已经尝试过observeEvent
,eventReactive
。 Isolate()
可能对我有帮助,但是我不确定如何实现它。其他所有东西都起作用,我只是不知道如何使动作按钮起作用并使代码更有效地运行。
library(shinythemes)
library(shiny)
library(matlib)
library(rhandsontable)
library(openxlsx) #used for writing data into excel xlsxFilfiles
states <- getStates()
ui <- fluidPage(theme = shinytheme("united"),
actionButton("action","Generate"),
#renderRHandsontable("Stats"),
textOutput("helper")
),
mainPanel(# tableOutput('table')
rHandsontableOutput("tbl")
)
))
server <- function(input, output){
#does not work
output$action <- reactive(input$action,output$tbl)
#output$action <- reactive(input$action,rHandsontableOutput("tbl"))
observeEvent(input$action, {
output$tbl("Stats")
})
inputVals <- eventReactive(input$action, {runif(input$action)})
df_new2 <- 0
#table I want to output
output$tbl <- renderRHandsontable({
df_new2 <<- comparison() #function that works
rhandsontable(df_new2)
})
}
runApp(shinyApp(ui, server), launch.browser = TRUE)
shinyApp(ui = ui, server = server)
Error in $.shinyoutput(output, tbl) :
Reading objects from shinyoutput object not allowed.
答案 0 :(得分:1)
没有可复制的数据,我不确定这是否可以完全解决您的问题。如果您打算延迟表的生成,那么eventReactive()
是执行此操作的好方法。在大括号中,可以定义事件后的输出。从那里,您可以使用输出呈现表。
您的事件反应式脚本可以像您需要的那样冗长,但是输出应该反映出您想要发送到表呈现的内容-类似于任何反应式对象。幸运的是,大括号内的所有内容都将保留,直到触发事件为止。
library(shinythemes)
library(shiny)
library(rhandsontable)
ui <- fluidPage(theme = shinytheme("united"),
mainPanel(# tableOutput('table')
actionButton("action","Generate"),
rHandsontableOutput("tbl")
))
server <- function(input, output){
values <- eventReactive(input$action, {
mtcars
})
#table I want to output
output$tbl <- renderRHandsontable({
rhandsontable(values())
})
}
shinyApp(ui = ui, server = server)