R 访问从反应函数创建的数据,以定义函数中的反应值

R 访问从反应函数创建的数据,以定义函数中的反应值,r,shiny,R,Shiny,我正在探索在shiny中使用交互式ggplot2的可能性。受此启发,我创建了一个闪亮的应用程序,可以从数据集中排除点,并在排除点具有不同颜色的位置绘制数据 应用程序R 这非常有效,但现在我希望能够通过以下方式定义VAL: vals<-reactiveValues(keeprows=rep(TRUE,nrow(CustomDataInput)) 在我的示例中,我尝试从数据中创建的数据访问行数: vals<-reactiveValues(keeprows=rep(TRUE,nrow(d

我正在探索在shiny中使用交互式ggplot2的可能性。受此启发,我创建了一个闪亮的应用程序,可以从数据集中排除点,并在排除点具有不同颜色的位置绘制数据

应用程序R 这非常有效,但现在我希望能够通过以下方式定义VAL:

vals<-reactiveValues(keeprows=rep(TRUE,nrow(CustomDataInput))
在我的示例中,我尝试从数据中创建的数据访问行数:

vals<-reactiveValues(keeprows=rep(TRUE,nrow(data()))
这给了我一个错误,因为我试图在非反应性环境中访问反应性变量。是否有方法访问在反应函数中创建的数据以定义反应值


谢谢你抽出时间

这个错误基本上解决了这个问题。正确的方法如下

library(shiny)
library(ggplot2)
server<-function(input, output) {

  vals <- reactiveValues()
  data <- reactive({
    set.seed(10)
    df=data.frame(x=rnorm(100),y=rnorm(100))
    vals$keeprows = rep(TRUE,nrow(df))
    df
  })

  #vals<-reactiveValues(keeprows=rep(TRUE,100))
  output$plot1 <- renderPlot({
    df=data()
    keep=df[vals$keeprows, ,drop=FALSE]
    exclude=df[!vals$keeprows, ,drop=FALSE]
    plot=ggplot(data=keep,aes(x,y))+geom_point()+theme_bw()+
      geom_point(data=exclude,fill=NA,col="black",alpha=0.75,shape=21)
    plot
  })

  observeEvent(input$plot1_click,{
    df=data()
    res <- nearPoints(df, input$plot1_click, allRows = TRUE,threshold=5)
    vals$keeprows <- xor(vals$keeprows, res$selected_)

  })

}

ui <- fluidPage(

  titlePanel("Reactive test"),


  mainPanel(
    plotOutput("plot1",click="plot1_click")

  )
)

shinyApp(ui = ui, server = server)
事先声明VAL变量,并在反应函数中使用该变量向VAL发送变量,如上所示。你应该没事的

library(shiny)
library(ggplot2)
server<-function(input, output) {

  vals <- reactiveValues()
  data <- reactive({
    set.seed(10)
    df=data.frame(x=rnorm(100),y=rnorm(100))
    vals$keeprows = rep(TRUE,nrow(df))
    df
  })

  #vals<-reactiveValues(keeprows=rep(TRUE,100))
  output$plot1 <- renderPlot({
    df=data()
    keep=df[vals$keeprows, ,drop=FALSE]
    exclude=df[!vals$keeprows, ,drop=FALSE]
    plot=ggplot(data=keep,aes(x,y))+geom_point()+theme_bw()+
      geom_point(data=exclude,fill=NA,col="black",alpha=0.75,shape=21)
    plot
  })

  observeEvent(input$plot1_click,{
    df=data()
    res <- nearPoints(df, input$plot1_click, allRows = TRUE,threshold=5)
    vals$keeprows <- xor(vals$keeprows, res$selected_)

  })

}

ui <- fluidPage(

  titlePanel("Reactive test"),


  mainPanel(
    plotOutput("plot1",click="plot1_click")

  )
)

shinyApp(ui = ui, server = server)