我试图在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)
}
但是我无法让它发挥作用......
感谢。
答案 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)