Shiny Shinny:操纵全局变量以输入回Shinny

Shiny Shinny:操纵全局变量以输入回Shinny,shiny,global-variables,Shiny,Global Variables,我制作了一款闪亮的应用程序,可以移除外围的实验文物: df=data.frame(seq(-1000,1000), rnorm(2001)) #not real data ui <- basicPage( plotOutput("plot1", click = "plot_click", brush = "plot_brush"), verbatimTextOutput("info"), plotOutput("tab") ) server <- function(i

我制作了一款闪亮的应用程序,可以移除外围的实验文物:

df=data.frame(seq(-1000,1000), rnorm(2001)) #not real data

ui <- basicPage(
  plotOutput("plot1", click = "plot_click", brush = "plot_brush"),
  verbatimTextOutput("info"),
  plotOutput("tab")
)

server <- function(input, output) {
  output$plot1 <- renderPlot({
    plot(df[,1], df[,2])
  })

  data_new<-eventReactive(input$plot_brush,{
    da=df
    rowmin <- which(da[,1] == round(as.numeric(input$plot_brush$xmin)))
    rowmax <- which(da[,1] == round(as.numeric(input$plot_brush$xmax)))
    da[rowmin:rowmax,2] = mean(da[,2])
    da=isolate(da)

    #writeToDatabase(da)
  })
  #output$zoom<-renderable({plot(data_new()[,1], data_new()[,2])})
  output$tab=renderPlot({plot(data_new()[,1], data_new()[,2])})
}

shinyApp(ui, server)

这是一个初步测试,看看是否可以动态更新变量。所有这些都是为了能够连续查看和消除上面显示的我的数据中的每个尖锐错误峰值,而不是每次都在同一个不可变(从shiny的角度)变量上重新运行代码???

您可能想使用
reactiveValues

server <- function(input, output) {
  my <- reactiveValues(df=data.frame(seq(-1000,1000), rnorm(2001))) # Initialize df

  output$plot1 <- renderPlot({plot(my$df[,1], my$df[,2])})

  observeEvent(input$plot_brush,{
    rowmin <- which(my$df[,1] == round(as.numeric(input$plot_brush$xmin)))
    rowmax <- which(my$df[,1] == round(as.numeric(input$plot_brush$xmax)))
    my$df[rowmin:rowmax,2] <- mean(my$df[,2]) # Update df
  })
}
服务器
Listening on http://127.0.0.1:6183
Warning: Error in change: unused argument (df)
Stack trace (innermost first):
    52: change
    51: is.data.frame
    50: write.table
    43: isolate
    42: server [/Users/Downloads/test.R#20]
     1: runApp
Error in change(df) : unused argument (df)
server <- function(input, output) {
  my <- reactiveValues(df=data.frame(seq(-1000,1000), rnorm(2001))) # Initialize df

  output$plot1 <- renderPlot({plot(my$df[,1], my$df[,2])})

  observeEvent(input$plot_brush,{
    rowmin <- which(my$df[,1] == round(as.numeric(input$plot_brush$xmin)))
    rowmax <- which(my$df[,1] == round(as.numeric(input$plot_brush$xmax)))
    my$df[rowmin:rowmax,2] <- mean(my$df[,2]) # Update df
  })
}