【问题标题】:How to access the output of an eventReactive when that eventReactive is called again. RShiny再次调用 eventReactive 时如何访问 eventReactive 的输出。闪亮
【发布时间】:2020-11-12 23:08:28
【问题描述】:

我正在尝试为我的学生创建一个抽样分发应用程序。我希望能够向他们展示,当您采集另一个样本时,采样分布就会建立。我有“add1”和“add5”按钮,用于将那么多样本添加到我当前的样本集中。 模型用于为应用程序首次运行时生成的单个样本创建图形。这也使得“一个可能的样本图”可以匹配在抽样分布中绘制的值。创建 add1 或 add5 按钮后,代码是从 model1 的输出开始绘制图形。这部分正在工作。但是,当我再次单击按钮时,我们会返回到一个样本,并且按钮不再能够将更多样本添加到我的集合中。我不确定原因是否与按钮无法正常工作有关,或者我的值是否在模型 1 中被覆盖。

我的另一个顾虑(实际上可能是上面的问题)是,当我尝试在 model1 中将 props 设置为等于 model1()$props 时,在触发新按钮单击时本地环境已被删除,并且旧样本和 model1()$props 已经消失,因此 props 设置为等于 model()$props。有什么想法吗?!请和谢谢。

server <- function(input, output) {
  
  toListen <- reactive({
    list(input$samps,input$prob, input$size, input$color1, input$color2)
  })
  
  model <- eventReactive(toListen(), {
    p <- as.numeric(input$prob)
    n <- as.numeric(input$size)
    
    props <- data.frame(sum(rbinom(n,1,p))/n)
    colnames(props) <- "props"
    
    
    list(props = props, p = p, n = n, color1 = color1, color2 = color2)
  })
  
  
  toListen1 <- reactive({
    list(input$add1, input$add5)
  })
  
  model1 <- eventReactive(toListen1(),{
    p <- as.numeric(input$prob)
    n <- as.numeric(input$size)
    add1 <- 0
    add5 <- 0

    if(exists(paste('"model1()$props"'))){
      props <- model1()$props
    }
    else
      props <- model()$props
    
    
    if(input$add1 ==1){
      add1 <- 1

      tempprops <- data.frame(sum(rbinom(n,1,p))/n)
      colnames(tempprops) <- "props"
      props <- data.frame(rbind(props, tempprops))
      shinyjs::disable("add1")
    }
    
    if(input$add5 ==1){
      add5 <- 1
      tempprops <- matrix(NA, 5,1)
      for (i in 1:5){
        rand.samp <- rbinom(n,1,p)
        tempprops[i] <- sum(rand.samp)/n
      }
      colnames(tempprops) <- "props"
      props <- data.frame(rbind(props, tempprops))
      shinyjs::disable("add5")
    }
    
    list(props = props, add1 = add1, add5 = add5)
  })
})

【问题讨论】:

    标签: r button shiny reactive


    【解决方案1】:

    也许你应该改变

    if(input$add1 ==1 ){
          add1 <- 1
          ...
        }
        
    if(input$add5 ==1 ){...}
    

    if(input$add1 >0 ){
          add1 <- 1
          ...
        }
        
    if(input$add5 >0 ){...}
    

    否则,input$add1 只等于 1 一次。后续单击将继续为 input$add1 的值增加 1。同样适用于input$add5

    【讨论】:

    • 我没有意识到按钮不是布尔值。我以为他们在关闭,而不是柜台。这有助于解决一个问题!非常感谢您的回复。不过,第二个问题仍然是个问题。
    • A checkbox 将是布尔值。 actionButton 不是。我不确定我是否完全理解另一个问题。 MRE 将有助于验证问题。也许声明 props &lt;- model1()$props 是一个问题,因为它不应该在 model1() 内调用。
    • 是的,我相信这是现在的主要问题。我只是不确定如何将该值存储在 model1 之外,然后在再次调用 model1 后重用它。
    • 请将其分配给reactiveValues 对象,并在model1() 中提取该信息
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    相关资源
    最近更新 更多