一种用户将选择存储为输入以供以后使用的方法

Posted

技术标签:

【中文标题】一种用户将选择存储为输入以供以后使用的方法【英文标题】:A way for users to store selections as inputs for later use 【发布时间】:2020-04-20 06:56:06 【问题描述】:

我正在尝试创建一种用户可以将他们的选择存储为输入的方式。这是我想要完成的示例:

1) 运行应用程序,它会立即生成一个包含三行的表。您可以使用 Sample Label 命名它,例如“Sample1”

2) 点击Save Sample 按钮,然后在我创建的面板中创建一个复选框作为输入,点击该复选框后,将自动将过滤器调整为点击Save Sample 按钮时的样子。

3) 然后将 disp 设置为 160,将 hp 设置为 110,这将返回两行。重复相同的步骤。您将其命名为“Sample2”,然后点击“Save Sample”。现在有两个复选框:Sample1 和 Sample2。您现在可以切换它们,以便用户可以选择他们想要的任何设置。理论上,您可以根据需要多次执行此操作。

library(shiny)
library(shinyWidgets)

ui <- fluidPage(

  selectInput("disp", "Disp", choices = unique(sort(mtcars$disp)), selected = 275.8),
  selectInput("hp", "hp", choices = unique(sort(mtcars$hp)), selected = 180),
  div(style="display:inline-block", textInput(('sample_name'), label = 'Sample Name',width = 200)),
  div(style="display:inline-block", actionButton(('select_sample'),icon = icon('save'), label = 'Save Sample')),
  panel(h2("User Created Inputs go here")),
  DT::dataTableOutput("cardata")

)

server <- function(input,output,session) 

  compileData <- reactive(

    res <- mtcars %>% filter(hp == input$hp & disp == input$disp)

  )

  output$cardata <- DT::renderDataTable(

    compileData()

  )



shinyApp(ui,server)

【问题讨论】:

【参考方案1】:

也许这对你有帮助。

您可以将过滤器设置保存在 reactiveValues 数据框中。创建过滤器后,复选框组将自动更新为新名称。

表格数据将根据这些选中的复选框进行过滤。对于此示例,如果未选择任何框,则显示的数据基于两个输入选择。但是,如果选中任何复选框,则数据表将包含根据这些选择过滤的数据。

让我知道这是否接近您的想法。

library(shiny)
library(shinyWidgets)

ui <- fluidPage(

  selectInput("disp", "Disp", choices = unique(sort(mtcars$disp)), selected = 275.8),
  selectInput("hp", "hp", choices = unique(sort(mtcars$hp)), selected = 180),
  div(style="display:inline-block", textInput(('sample_name'), label = 'Sample Name',width = 200)),
  div(style="display:inline-block", actionButton(('select_sample'),icon = icon('save'), label = 'Save Sample')),
  panel(h2("User Created Inputs go here"),
        uiOutput("checkboxes")
        ),
  DT::dataTableOutput("cardata")
)

server <- function(input,output,session) 

  rv <- reactiveValues(filters = data.frame(
    id = character(),
    disp = double(),
    hp = double()
  ))

  compileData <- reactive(
    if (is.null(input$checkboxes)) 
      mtcars %>% filter(hp == input$hp & disp == input$disp)
     else 
      merge(mtcars, rv$filters[rv$filters$id %in% input$checkboxes, ], by = c("disp", "hp"))
    
  )

  output$cardata <- DT::renderDataTable(
    compileData()
  )

  observeEvent(input$select_sample, ignoreInit = FALSE, 
    rv$filters <- rbind(rv$filters, data.frame(
      id = input$sample_name,
      disp = input$disp,
      hp = input$hp
      )
    )
  )

  output$checkboxes <- renderUI(
    checkboxGroupInput("checkboxes", "Filters:", choices = rv$filters$id, selected = NULL)
  )


shinyApp(ui,server)

【讨论】:

是的!这看起来很棒!谢谢!还有一个问题:有没有一种方法可以保存它们以备将来使用? 是的,你可以。将看看this 关于闪亮应用程序中的本地和远程数据存储。另外,如果您觉得这有帮助,请随时点赞或接受答案。

以上是关于一种用户将选择存储为输入以供以后使用的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将 jQuery 对象保存在我的数组中以供以后使用?

为 WordPress 插件存储变量而不创建新表

存储结果集以供以后获取

保存选择以供以后在 JS 中使用

php 文件以获取设备令牌并将其存储以供以后用户使用

设置会话文化