首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用shinyWidget保存和加载输入::updateVirtualSelect()引导闪亮的应用程序崩溃

使用shinyWidget保存和加载输入::updateVirtualSelect()引导闪亮的应用程序崩溃
EN

Stack Overflow用户
提问于 2022-07-25 12:33:39
回答 1查看 39关注 0票数 1

我正在尝试将shinyWidgets::virtualSelectInput()保存到csv,然后加载csv文件并使用shinyWidgets::updateVirtualSelect().更新选定的输入。

更具体地说,我希望用户选择输入,将输入写入具有用户名的csv文件中,然后选择保存文件并加载保存在其中的输入。

但是,我得到以下错误:

警告: if:参数中的错误长度为零。没有堆栈跟踪可用

应用程序就崩溃了。

下面是一个使用字母的可复制的简单示例:

代码语言:javascript
运行
复制
ui <- shiny::fluidPage(
  
  shinyWidgets::virtualSelectInput(
            inputId = "letters",
            label = "Letters",
            choices = NULL,
            selected = NULL,
            multiple = TRUE,
            search = T,
            placeholder = "Select Letters"
            
          ),
  shiny::inputPanel(
            shiny::textInput(
              inputId = "savefilename",
              label = "File Name",
              placeholder = "Name to save file"),
            shiny::actionButton(
              "saveFile", "Save"
            ),
            shiny::selectInput(
              'selectfile','Select File',
              choice = list.files(pattern = ".csv")
            ),
            shiny::actionButton(
              "loadFile","Load",
            )
            
          ),
  
)




server <- function(input,output,session){
  
    observe(
    {
      shinyWidgets::updateVirtualSelect(
        session = session,
        inputId = "letters",
        label = "Letters",
        choices = LETTERS
      )
      
    }
  )
  
  # Save File
  
  observeEvent(
    input$saveFile, 
    {
      LETTERS_table = tibble("LETTERS_picked" = input$letters) %>% 
        write_csv(file = paste(paste(input$savefilename,"_.csv",sep = ""),sep = ""))
      updateSelectInput(
        session = session,
        inputId = "selectfile",
        choices = list.files(pattern = ".csv")
      )
      
      
    }
  )
  
  
  
  
    # Load File
  
  observeEvent(
    input$loadFile, 
    {
      LETTERS_table = read_csv(file = input$selectfile)
      shinyWidgets::updateVirtualSelect(
        session,
        inputId = "letters",
        choices = LETTERS,
        selected = as.character(na.omit(LETTERS_table$LETTERS_picked))
      )

    }
  )
  
  
}


shinyApp(ui, server)

出于技术原因-我不能使用 shinyWidgets::pickerInput

到底怎么回事?我怎么才能解决这个问题?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-07-25 13:47:09

请参阅?updateVirtualSelect

代码语言:javascript
运行
复制
updateVirtualSelect(
  inputId,
  label = NULL,
  choices = NULL,
  selected = NULL,
  disable = NULL,
  session = shiny::getDefaultReactiveDomain()
)

您需要确保保持函数参数的顺序,或者传递命名的参数。在上面的代码中,您将session作为第一个未命名的参数传递--应该是inputId

代码语言:javascript
运行
复制
library(shiny)
library(shinyWidgets)
library(readr)
library(tibble)

ui <- shiny::fluidPage(
  shinyWidgets::virtualSelectInput(
    inputId = "letters",
    label = "Letters",
    choices = NULL,
    selected = NULL,
    multiple = TRUE,
    search = T,
    placeholder = "Select Letters"
  ),
  shiny::inputPanel(
    shiny::textInput(
      inputId = "savefilename",
      label = "File Name",
      placeholder = "Name to save file"
    ),
    shiny::actionButton("saveFile", "Save", style = "margin-top: 25px"),
    shiny::selectInput('selectfile', 'Select File', choice = list.files(pattern = ".csv")),
    shiny::actionButton("loadFile", "Load", style = "margin-top: 25px")
  )
)

server <- function(input, output, session) {
  
  shinyWidgets::updateVirtualSelect(
    session = session,
    inputId = "letters",
    label = "Letters",
    choices = LETTERS
  )
  
  # Save File
  observeEvent(input$saveFile,
               {
                 req(input$letters)
                 LETTERS_table = tibble("LETTERS_picked" = input$letters) %>%
                   write_csv(file = paste(paste(input$savefilename, "_.csv", sep = ""), sep = ""))
                 updateSelectInput(
                   session = session,
                   inputId = "selectfile",
                   choices = list.files(pattern = ".csv")
                 )
               })
  
  # Load File
  observeEvent(input$loadFile,
               {
                 LETTERS_table = read_csv(file = input$selectfile)
                 req(NROW(LETTERS_table) > 0)
                 shinyWidgets::updateVirtualSelect(
                   inputId = "letters",
                   choices = LETTERS,
                   selected = as.character(na.omit(LETTERS_table$LETTERS_picked)),
                   session = session
                 )
               })
}

shinyApp(ui, server)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73109327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档