gpt4 book ai didi

r - 使用 >1000 个选项更新服务器端选择输入的选择失败

转载 作者:行者123 更新时间:2023-12-04 00:21:42 25 4
gpt4 key购买 nike

我有一个 Shiny 的应用程序,其中包含一个服务器端选择输入和一个长列表(> 10k)的选择。
我想在单击按钮时更新选择。这是一个可重现的例子

library(shiny)

ui <- fluidPage(
actionButton('buttonid','Button'),

selectizeInput("listid", "A long list", choices = NULL)
)

server <- function(input, output, session)
{
updateSelectizeInput(session, "listid", choices = paste("Item", 1:10000), server = T)
observeEvent(input$buttonid,
{
updateSelectizeInput(session, "listid", selected = "Item 1234")
})
}

shinyApp(ui = ui, server = server)

当我按下按钮时,上面的代码会导致一个空白的选择。
但是,如果我搜索“Item 1234”,然后更改选择并按下按钮,现在该项目被选中。

此外,尝试在 Item 1 和 1000 之间选择一个项目不会出现问题,大概是因为一开始就加载了 1000 个项目。

这似乎类似于这个旧错误,但我不确定是否有解决方法 https://github.com/rstudio/shiny/issues/1018

最佳答案

简短的回答是明确重新指定您的 choicesserver在您的更新中。

server <- function(input, output, session) 
{

myChoices <- paste("Item", 1:10000)

updateSelectizeInput(session, "listid", choices = myChoices, server = T)
observeEvent(input$buttonid,
{
updateSelectizeInput(session, "listid",
server = TRUE,
choices = myChoices,
selected = "Item 1234")

})
}

server 的默认值在 updateSelectizeInputFALSE .这会导致代码放入使用 updateSelectInput 的控制语句中。反而。从功能代码
function (session, inputId, label = NULL, choices = NULL, selected = NULL, 
options = list(), server = FALSE)
{
...

if (!server) {
return(updateSelectInput(session, inputId, label, choices,
selected))
}

...

假设所有选项都存在(但正如您提到的,只有前 1000 个存在),这会向客户端发送一条消息。

刚设置 server = TRUE单击按钮时会导致错误。
Warning: Error in [.data.frame: undefined columns selected
[No stack trace available]

我没有完全追查原因,但它最终创建了一个空的选择 data.frame,其属性表示所选值。我猜测在函数调用中的其他地方 session对象,此属性用于尝试选择从空 data.frame 创建的列。

更新功能似乎没有改变 choices存储在服务器上,所以这可能就是您搜索它时它在那里的原因。在更改所选值期间,它似乎试图从 NULL 选项列表而不是服务器上的选项列表中进行选择。

看来您基本上必须重新创建您的 selectizeInput使用超出初始列表的选定值进行更新时。

关于r - 使用 >1000 个选项更新服务器端选择输入的选择失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60264119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com