为什么在将数据键入表之前,代码会多次运行?如何制作在ui中创建表格的操作按钮?

时间:2019-08-16 17:05:49

标签: r shiny

我正在从Excel工作表中读取代码,并使用表格生成网站,以便用户可以输入数据。该数据基于底层向量生成其他图形。但是,每当我运行它时,它就会非常慢并且运行多次。通常,在用户界面中使用rHandsontableOutput("tbl")会生成一个表,但不在操作按钮的控制下。这是一个I / O经济分析工具。

我对output$(something)的参数如何工作不太熟悉。我已经尝试过observeEventeventReactiveIsolate()可能对我有帮助,但是我不确定如何实现它。其他所有东西都起作用,我只是不知道如何使动作按钮起作用并使代码更有效地运行。

代码:

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.

1 个答案:

答案 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)
相关问题