我有一个闪亮的应用程序,我希望
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
时仍然存在(它存在于日志中)。我还运行了在here和here找到的示例代码,并得到了错误,尽管错误是不同的。它以前曾工作过,但几天前开始出现故障,并且恢复到之前的工作版本并不能修复它。
我不能直接将
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
选择(这有效,但不是我想要的功能)。shinyapps.io
并使用他们在那里使用的任何环境。choices
函数内部使用静态向量手动设置 selected
和 updateSelectInput
。我的 UI 中的下拉菜单
selectInput
仅包含数据中存在的 cat1
分类变量的级别。
对于好奇的人来说,这是一个业余错误。我在某个地方发生了名称冲突,因此将
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)
感谢您的阅读!