R Shiny selectizeInput 服务器端未正确初始化

R Shiny selectizeInput server side not initializing correctly

当我尝试在 Shiny 应用程序中嵌入选择输入小部件时,我 运行 遇到了以下问题:

使用 server = TRUE 时,项目列表未使用完整的项目列表进行初始化。只有在搜索框中输入一个字符后,项目才会出现。这与 server = FALSE 时的行为相反。在这种情况下,所有项目最初都出现在框中(这是我想要的行为)。我想使用 server = TRUE 选项的原因是我希望能够对项目应用格式,而在客户端生成项目时这是不可能的。下面的示例重现了这种现象,一个选择输入使用 server = TRUE,另一个选择输入使用 server = FALSE。在我看来,两种情况下的行为应该相同。

重现问题的示例 app.R:

library(shiny)

server <- function(input, output, session) {
  updateSelectizeInput(session, 'cars1', server = TRUE, choices = rownames(mtcars))  
  updateSelectizeInput(session, 'cars2', server = FALSE, choices = rownames(mtcars))
}

ui <- fluidPage(
  selectizeInput('cars1', label = "server side", choices = NULL),
  selectizeInput('cars2', label = "client side", choices = NULL)  
  )

shinyApp(ui = ui, server = server)

这是一个错误还是我使用小部件不正确?我是 运行 R 版本 3.1.3 和 Windows 7 64 位上的 Shiny 0.11.1。

我相信有一个选项可以为 selectize 设置初始化值。它在 options 中为 items。你必须向它传递一个你想要的值的数组,所以你应该能够只传递它 rownames(mtcars) 它应该可以工作。虽然我从来没有用超过一个值尝试过,所以我不是 100% 肯定。

所以我相信你的命令是

selectizeInput('cars1', label= "server side", choices = NULL, options = list(items = rownames(mtcars))),

然后其他行依此类推。或者,如果这不起作用,请尝试对 items 数组中的初始值进行硬编码。我知道不太好,我不知道你有多少初始值,但我相信它会起作用。

受 Colin 回答的启发,我找到了一个似乎可行的解决方法,尽管我仍然认为这实际上是一个闪亮的错误。首先通过添加参数 selected = rowsnames(mtcars) 选择所有选项,然后再次调用 updateSelectizeInput(),选择第一项,项目列表将填充所有 choices/items。这也适用于 multiple = TRUE (因为我想使用它)。

library(shiny)

server <- function(input, output, session) {
  updateSelectizeInput(session, 'cars1', server = T, choices = rownames(mtcars), selected = rownames(mtcars))
  updateSelectizeInput(session, 'cars1', server = FALSE, selected = rownames(mtcars)[1])
  updateSelectizeInput(session, 'cars2', server = FALSE, choices = rownames(mtcars))
}

ui <- fluidPage(
   selectizeInput('cars1', label= "server side", choices = NULL, multiple = F),
  selectizeInput('cars2', label = "client side", choices = NULL)  
)

shinyApp(ui = ui, server = server)

此问题已 fixed in shiny v0.12.0 (on CRAN now)。服务器端 selectizeInput() 最初将加载前 1000 个选项(或 n < 1000 时的前 n 个选项)。