R闪亮的observe()函数将updateSelectInput()视为一个“环境”,并且需要一个“data.frame”

问题描述 投票:0回答:1

问题

我有一个闪亮的应用程序,我希望

selectInput
只获取数据中的唯一值。在下面的示例中,尽管
Man
是现实世界中的可能值,但它不在数据中,因此我希望下拉值仅包含
Woman
Child
。当我运行下面的最小工作示例时,我收到此错误:

Warning: Error in : `x` must be 'data.frame', not 'environment'.
  47: hypothesize_fn
  46: predicate
  44: check_type
  43: calculate
  41: observe
  40: server [#2]
   3: runApp
   2: print.shiny.appobj
   1: <Anonymous>
Error : `x` must be 'data.frame', not 'environment'.

此错误在三台不同的计算机(一台 Windows、Mac 和 Linux)上以及当我部署到

shinyapps.io
时仍然存在(它存在于日志中)。我还运行了在herehere找到的示例代码,并得到了错误,尽管错误是不同的。它以前曾工作过,但几天前开始出现故障,并且恢复到之前的工作版本并不能修复它。

我不能直接将

sort(unique(data$cat1))
传递到
selectInput()
的原因是因为在我的完整工作项目中,
ui.R
server.R
是两个不同的文件,并且数据仅加载到
server.R
中。谢谢大家。

最小工作示例

library(bslib)
library(shiny)
library(tidyverse)

data <- tibble("cat1" = c("Woman", "Woman", "Child"), "cat2" = c("b", "c", "c"))

ui <- page_navbar(
  sidebar = sidebar(
    selectInput(
      "filter_category",
      "Categories:",
      choices = NULL,
      selected = NULL,
      multiple = TRUE
    )
  )
)

server <- function(input, output, session) {
  observe({
    updateSelectInput(
      session,
      "filter_category", 
      choices = sort(unique(data$cat1)),
      selected = sort(unique(data$cat1))
    )
  })
}

shinyApp(ui = ui, server = server)

可能相关的问题这里,但到目前为止还没有帮助。

我已经尝试过:

  • 恢复到以前的功能版本。现在错误仍然存在。
  • 删除
    observe()
    功能并返回静态
    selectInput
    选择(这有效,但不是我想要的功能)。
  • 在 Mac、Windows 和 Linux 机器之间切换。
  • 部署到
    shinyapps.io
    并使用他们在那里使用的任何环境。
  • choices
    函数内部使用静态向量手动设置
    selected
    updateSelectInput

我期待的是:

我的 UI 中的下拉菜单

selectInput
仅包含数据中存在的
cat1
分类变量的级别。

r shiny
1个回答
0
投票

找到解决方案:

对于好奇的人来说,这是一个业余错误。我在某个地方发生了名称冲突,因此将

observe()
替换为
shiny::observe()
就成功了。首次加载包时,我没有看到
observe()
函数在任何地方列为冲突,因此我不确定如何找到它与哪个包发生冲突。但这里是我正在使用的软件包的列表,以防其他人遇到同样的问题。

library(bslib)
library(colorspace)
library(DT)
library(glue)
library(googlesheets4)
library(janitor)
library(plotly)
library(shiny)
library(thematic)
library(tidymodels)
library(tidyverse)
library(yaml)

感谢您的阅读!

© www.soinside.com 2019 - 2024. All rights reserved.