在一个闪亮的应用程序中,我上传了一个数据集,它被设置为被动的(因为它可以被更新和替换),并使用ggplot2绘制了一个lm模型。
我只展示了一小部分代码,以使其简单。我明白问题是由于在observeEvent()
中使用了reactive()
函数。但我不知道如何解决这个问题。
这很好用。请参阅ui和server中的以下代码部分。
#in ui
fluidRow(column(2,numericInput("Xmin", "Xmin:", -0.2, step = 0.1)),
column(2,numericInput("Xmax", "Xmax:", 2, step = 0.1)),
column(2,numericInput("Ymin", "Ymin:", -0.2, step = 0.5)),
column(2,numericInput("Ymax", "Ymax:", 20, step = 0.5))),
plotOutput("plot_gam", click = "plot1_click", brush = brushOpts(id = "plot1_brush")),
actionButton("exclude_toggle", "Toggle points"),
actionButton("exclude_reset", "Reset")
#in server
#PLOT MODEL
dg <- reactive({dat() %>% select(A,B)})
vals <- reactive({reactiveValues(keeprows = rep(TRUE, nrow(dg())))})
keep <- reactive({dg()[ vals()$keeprows, , drop = FALSE]})
exclude <- reactive({dg()[!vals()$keeprows, , drop = FALSE]})
output$plot_gam <- renderPlot({
ggplot(keep(), aes(A, B)) +
geom_point() +
geom_smooth(method = lm, fullrange = TRUE, color = "red") +
geom_point(data = exclude(), shape = 21, fill = NA, color = "black", alpha = 0.25) +
coord_cartesian(xlim = c(input$Xmin, input$Xmax), ylim = c(input$Ymin,input$Ymax))
})
现在我希望能够切换点。
# Toggle points that are clicked
observeEvent(input$plot1_click,
{req(vals())
res <- nearPoints(dg(), input$plot1_click, allRows = TRUE)
vals()$keeprows <- xor(vals()$keeprows, res$selected_)
})
# Toggle points that are brushed, when button is clicked
observeEvent(input$exclude_toggle, {
req(vals())
res <- brushedPoints(dg(), input$plot1_brush, allRows = TRUE)
vals()$keeprows <- xor(vals()$keeprows, res$selected_)
})
# Reset all points
observeEvent(input$exclude_reset, {
req(vals())
vals()$keeprows <- rep(TRUE, nrow(dg()))
})
不幸的是,应用程序崩溃,而我试图切换。我得到了以下消息Warning: Error in <-: invalid (NULL) left side of assignment
1条答案
按热度按时间wnavrhmk1#
根据@stefan在上面的评论中的回应,这里是解决方案: