在Shiny中调用函数并保存返回列表

时间:2016-08-26 06:39:50

标签: r shiny

我试图在server.R中调用一个函数并将返回的列表保存到全局环境中,该函数由一个操作按钮调用。然后我将使用该列表运行另一个函数,该函数由另一个按钮(基于列表)触发,以绘制图形。这是一个简单的示例代码:

shinyServer(function(input, output) {

  v <- reactiveValues()

  observeEvent(input$button1, {
    v$button1 = TRUE
  })

  savedlist <<- reactive({
    if (v$button1){
      return(savedlist <- f1(10)
    }
  })

 output$plot <- renderPlot({
   f2(savedlist)
 })

})

,其中

f1 <- function(x){
  savedlist = list(xdata = 1:x, ydata = x:1)
  names(savedlist) = c("xdata", "ydata")
  return(savedlist)
}

f2 <- function(x){
  attach(savedlist)
  plot(xdata, ydata)
}

但是我无法让它发挥作用......

感谢。

1 个答案:

答案 0 :(得分:1)

试试这个

library(shiny)
ui=shinyUI(fluidPage(

  actionButton("button1","button1"),
  plotOutput("plot")

))
f1 <- function(x){
  savedlist = list(xdata = 1:x, ydata = x:1)
  names(savedlist) = c("xdata", "ydata")
  return(savedlist)
}
f2 <- function(x){ # change a bit to use x as argument
  plot(x$xdata, x$ydata)
}

server=shinyServer(function(input, output) {

  v <- reactiveValues(button1=FALSE)

  observeEvent(input$button1, {
    v$button1 = TRUE
  })

  observe({
    if (v$button1){
      savedlist <<- f1(10)
    }
  })

      output$plot <- renderPlot({
        if(v$button1){# plot only after button because before list dont exist
        f2(savedlist)
        }
      })

})

shinyApp(ui,server)