我正在构建一个包含多个选项卡的应用程序,其中一些涉及过多的计算,另一些涉及快速计算。 允许用户在反应性或手动更新之间进行选择的复选框与“刷新”按钮相结合将是理想的。

下面的简单示例说明了我的目标。 它几乎可以工作,除了在“自动刷新” - 检查框未选中时最后一次刷新,这是一个痛苦,如果计算密集的选项卡打开。 有没有办法解决?

ui.r

library(shiny)
shinyUI(fluidPage(
    titlePanel("Test"),
    sidebarLayout(
        sidebarPanel(
            checkboxInput("autoRefresh", "Automatically refresh", TRUE),
            actionButton("refresh", "Refresh!"),
            radioButtons("choice", "Choice of value:",
                c("10" = 10,
                "20" = 20))
            ),

        mainPanel(
            tabsetPanel(type = "tabs", 
                tabPanel("Add random decimals to value", textOutput("value"))
            )
        )
    )
))

server.r

library(shiny)
shinyServer(function(input, output) {
    output$value <- renderText({

        input$refresh
        if(input$autoRefresh == 1) {
            input$choice
        }
        isolate({
            output <- runif(1,0,1) + as.numeric(input$choice)
        })
    })
})

提前谢谢了!

#1楼 票数:2

您可以缓存输出并快捷方式 - 在适当的时候返回它

library(shiny)
shinyServer(function(input, output) {
  output$value <- renderText({

    input$refresh
    if(input$autoRefresh == 1) {
      input$choice
    } else return(cachedOutput)
    isolate({
      cachedOutput <<- output <- runif(1,0,1) + as.numeric(input$choice)
    })
  })
})

#2楼 票数:2 已采纳

在这个解决方案中,我创建了两个观察者:一个用于何时refresh按钮,另一个用于何时更改choice 第一个总是更新输出。

第二个检查input$autoRefresh的状态,然后退出或更新renderText

不幸的是,你必须编写两次runif命令,这对于更新你的代码是不利的(如果你做了两次更容易引入错误)。 在实践中,您可能想要创建一个新函数,然后只需调用该函数,如果这是您实际应用程序中的复杂/多行过程。

  shinyServer(function(input, output) {
    observe({
      input$refresh
      output$value<-renderText({
        isolate(runif(1,0,1) + as.numeric(input$choice))
        })
      })
    observe({
      input$choice
      output$value<-if(input$autoRefresh==0) return() else {
          renderText({isolate(runif(1,0,1) + as.numeric(input$choice))})
      }  
    })
  })

  ask by mholopai translate from so

未解决问题?本站智能推荐:

1回复

R闪亮选择输入反应性

在我的Shiny应用程序中,我的UI中有一个名为bob的selectInput,具有选项“ A”,“ B”,“ C”。 在服务器的顶部(之前没有其他功能) 点表示大约一千万和六行代码。 现在,一千万零六行代码主要提到了几个大型函数文件,其中一个参数是alice。 我想让al
1回复

R使用用户选择的变量进行闪亮反应性绘图

我最近开始使用R-Shiny,由于遇到问题,我有一个简单的问题。 因此,我正在尝试构建一个反应式折线图,用户可以在其中定义数据库中的2个变量。 我已经能够获得下拉列表的变量列表,但是我无法使用所选的值来绘制折线图。 参考代码: 和部分服务器代码 我跳过了编写渲染
2回复

闪亮的允许用户选择要显示的列

我正在研究Shiny中的数据表功能,我感兴趣的是创建一个可列出数据表所有列并允许用户选择要在数据表上查看的列的井面板或侧面板。 现在,下面的代码显示玩具数据集mtcars所有列 我有兴趣向用户提供使用复选框打开或关闭这些列的功能 解决这个问题的任何帮助都非常有用。 提前致
1回复

如果还有闪亮的反应性

我有一个相当简单的问题,但无法弄清楚为什么它不起作用 如果选择的值不是'a'我基本上会尝试对数据集进行子集化。 如果选择'a' ,我希望返回整个df。 刚碰到 警告:如果以下错误:参数长度为零[没有可用的堆栈跟踪]
2回复

闪亮的反应性

我有一个包含大量参数的应用程序。 每个参数都有很多粒度,这使得找到所需的参数变得很痛苦。 这导致反应部分不断地计算,这减慢了事情。 我添加了一个submitButton,它解决了上述问题,但后来又遇到了另一个问题。 下面是我构建的框架的简单复制。 参数输入采用1到1000之间的数字
2回复

闪亮 iframe | 反应性

我正在尝试显示动态iframe以根据用户对URL的输入来显示youtube视频。 我的代码不会产生错误,但是视频不会显示,您有什么解决方案吗? 提前谢谢了! 问候, 汤玛士 我的代码: 用户界面 服务器
2回复

反应性DateRangeInput为闪亮

我正在自学Shiny,并且卡在ggplot2图上,无法使用反应性dateRangeInput作为我的x轴。 我有几个问题: 有没有一种方法可以使用我的数据框来获取日期范围输入的最小值和最大值,而不必对其进行硬编码,因此当我向数据框添加更多推文时,不必每次都对这些值进行硬编码了吗?
1回复

闪亮:renderUI反应性的问题

我有一个看似小但棘手的问题与闪亮应用程序中的反应功能。 该应用程序旨在显示选择公司时的lineChart,并在选择“全部”时显示所有公司的条形图。 例如,选择时: 按类别1 = 3过滤并按类别1:2过滤ui,只有4家公司留在公司下拉,我希望能够选择公司中的公司A下拉以获得公司A的折