【发布时间】:2020-08-11 08:28:55
【问题描述】:
我正在尝试制作一个闪亮的仪表板应用程序,其中下拉菜单中可用的选项是从反应数据对象的列中检索的。
目前我的代码如下所示:
library(shiny)
library(shinydashboard)
library(shinyWidgets)
library(tidyverse)
data <- reactiveFileReader(
intervalMillis = 100000,
NULL,
filePath = 'Data\\data.csv',
readFunc = read.csv,
fileEncoding="UTF-8-BOM"
)
header <- dashboardHeader(title = "test")
sidebar <- dashboardSidebar(
sidebarMenu(
menuItem("plots", tabName = "plots"),
pickerInput('to','To:',
options = list(`actions-box` = TRUE, size = 10), multiple = TRUE,
choices = NULL)
)
)
fluid1 <- fluidRow(
box()
)
body <- dashboardBody(
tabItems(
tabItem(
tabName = 'plots', h2(fluid1)
)
)
)
ui <- dashboardPage(title = 'test', header, sidebar, body, skin='blue')
server <- function(input, output){
choices <- reactive({
data() %>%
select(to) %>%
unique()
})
observe({updatePickerInput('to',choices = choices())})
}
shinyApp(ui = ui, server = server)
还有一些示例数据:
data <- data.frame(from = c('RCD', 'RCD', 'RCR', 'RCD', 'RCS', 'RCR', 'RCR', 'RCS', 'RCO', 'RCS'),
to = c('RCS', 'RCR', 'RCO', 'RCO', 'RCR', 'RCD', 'RCS', 'RCD', 'RCR', 'RCO'),
n = c(1,2,3,4,5,6,7,8,9,10))
我对此的期望是 -
choices <- reactive({
data() %>%
select(to) %>%
unique()
})
在data() 反应对象的to 列中给我一个唯一值列表,然后我可以将其传递给observe({updatePickerInput('to',choices = choices())})
相反,我得到了这个错误:
Warning: Error in : $ operator is invalid for atomic vectors
我对使用 Shiny 很陌生,所以在解决这个问题时遇到了真正的问题。 任何帮助将不胜感激
【问题讨论】:
-
尝试在您的
updatePickerInput语句(updatePickerInput(session, 'to', choices = choices()))中添加session,并确保session在您的服务器函数中:server <- function(session, input, output) -
@Ben 太棒了,谢谢
-
@Ben 发帖回答一些神奇的互联网点
-
@hedgedandlevered 没问题 - 很高兴提供答案。