来自 selectInput 的闪亮更新数据
Shiny update data from selectInput
我在获取 selectizeInput 的输出以更新上传的 csv 数据时遇到问题。有问题的具体代码块是
observeEvent(input$Go, {
tmp <- values$df_data
output$Grp = renderUI({
lvls <- tmp %>%
pull(Group) %>%
levels
selectizeInput('group', 'Groups', choices = lvls, selected = lvls[1], multiple = FALSE)
})
tmp1 <- tmp %>%
filter(Group == "A") # need to change here by updating the value from input$Grp
values$df_data <- tmp1
})
'Group' 列使用硬编码值进行筛选。我的意图是通过获取 "Grp" 的值使其动态化。下图显示了问题
enter image description here
完整代码如下
library(shinydashboard)
library(shiny)
library(dplyr)
library(tidyr)
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(
width = 200,
sidebarMenu(
menuItem("File Upload", icon = shiny::icon("table")),
fileInput('datafile', 'Choose CSV file',
accept=c('text/csv', 'text/comma-separated-values,text/plain')),
uiOutput('Grp'),
actionButton("Go","Subset Data"))
),
dashboardBody( fluidPage(
titlePanel("Data Table"),
sidebarLayout(
tabPanel("tab",
div( id ="Sidebar",sidebarPanel(
))),
mainPanel(
DT::dataTableOutput("tableOut")
)
)
)
)
)
server = function(input, output, session) {
values <- reactiveValues(df_data = NULL)
observeEvent(input$datafile, {
values$df_data <- read.csv(input$datafile$datapath)
})
observeEvent(input$Go, {
tmp <- values$df_data
output$Grp = renderUI({
lvls <- tmp %>%
pull(Group) %>%
levels
selectizeInput('group', 'Groups', choices = lvls, selected = lvls[1], multiple = FALSE)
})
tmp1 <- tmp %>%
filter(Group == "A") # need to change here by updating the value from input$Grp
values$df_data <- tmp1
})
output$tableOut <- DT::renderDataTable({
DT::datatable(values$df_data)
})
}
shinyApp(ui = ui, server = server)
我正在上传 .csv 文件。下面的数据和我的差不多。
set.seed(12345)
data <- data.frame(DATE = rep(seq(as.Date("2014-01-01"), length.out = 200,
by = "week"), each = 4), Group = rep(c("A", "B", "C", "D"), each = 200),
ValueColumn = rnorm(800))
欢迎来到这里的网站。这也是我最近遇到的一个问题——它似乎与 selectizeInput
无关,而是与您试图让 Shiny 应用程序达到 "see" 的任何新数据有关。这里有几件事可以尝试:
- 删除闪亮服务器根目录中的任何
_cache
目录,然后尝试重新加载。如果没有区别,
touch
.csv
文件(或在 Windows 上进行编辑以获得新的时间戳),然后再次尝试加载。如果没有区别,
- 使用
sudo systemctl restart shiny-server
重新启动 shiny 服务器,其中最后一个参数是您的 shiny 服务器的名称(默认为 shiny-server
)
最后一个解决方案对我来说是最可靠的——它是本文档中的 #2 ()——从命令行重新启动闪亮的服务器。这工作可靠且常规。此解决方案中的其他想法在我的机器上不起作用,因此必须取决于您的服务器或客户端规格。
对我有用的第二件事是使用 reactiveTimer
(https://shiny.rstudio.com/reference/shiny/0.14/reactiveTimer.html)。
无论如何,如果你一直在用这个来撞墙,这是一个棘手的问题,对我们许多人来说都是麻烦。祝你好运,为你的上下文选择最佳解决方案。
我在获取 selectizeInput 的输出以更新上传的 csv 数据时遇到问题。有问题的具体代码块是
observeEvent(input$Go, {
tmp <- values$df_data
output$Grp = renderUI({
lvls <- tmp %>%
pull(Group) %>%
levels
selectizeInput('group', 'Groups', choices = lvls, selected = lvls[1], multiple = FALSE)
})
tmp1 <- tmp %>%
filter(Group == "A") # need to change here by updating the value from input$Grp
values$df_data <- tmp1
})
'Group' 列使用硬编码值进行筛选。我的意图是通过获取 "Grp" 的值使其动态化。下图显示了问题
enter image description here
完整代码如下
library(shinydashboard)
library(shiny)
library(dplyr)
library(tidyr)
ui = dashboardPage(
dashboardHeader(),
dashboardSidebar(
width = 200,
sidebarMenu(
menuItem("File Upload", icon = shiny::icon("table")),
fileInput('datafile', 'Choose CSV file',
accept=c('text/csv', 'text/comma-separated-values,text/plain')),
uiOutput('Grp'),
actionButton("Go","Subset Data"))
),
dashboardBody( fluidPage(
titlePanel("Data Table"),
sidebarLayout(
tabPanel("tab",
div( id ="Sidebar",sidebarPanel(
))),
mainPanel(
DT::dataTableOutput("tableOut")
)
)
)
)
)
server = function(input, output, session) {
values <- reactiveValues(df_data = NULL)
observeEvent(input$datafile, {
values$df_data <- read.csv(input$datafile$datapath)
})
observeEvent(input$Go, {
tmp <- values$df_data
output$Grp = renderUI({
lvls <- tmp %>%
pull(Group) %>%
levels
selectizeInput('group', 'Groups', choices = lvls, selected = lvls[1], multiple = FALSE)
})
tmp1 <- tmp %>%
filter(Group == "A") # need to change here by updating the value from input$Grp
values$df_data <- tmp1
})
output$tableOut <- DT::renderDataTable({
DT::datatable(values$df_data)
})
}
shinyApp(ui = ui, server = server)
我正在上传 .csv 文件。下面的数据和我的差不多。
set.seed(12345)
data <- data.frame(DATE = rep(seq(as.Date("2014-01-01"), length.out = 200,
by = "week"), each = 4), Group = rep(c("A", "B", "C", "D"), each = 200),
ValueColumn = rnorm(800))
欢迎来到这里的网站。这也是我最近遇到的一个问题——它似乎与 selectizeInput
无关,而是与您试图让 Shiny 应用程序达到 "see" 的任何新数据有关。这里有几件事可以尝试:
- 删除闪亮服务器根目录中的任何
_cache
目录,然后尝试重新加载。如果没有区别, touch
.csv
文件(或在 Windows 上进行编辑以获得新的时间戳),然后再次尝试加载。如果没有区别,- 使用
sudo systemctl restart shiny-server
重新启动 shiny 服务器,其中最后一个参数是您的 shiny 服务器的名称(默认为shiny-server
)
最后一个解决方案对我来说是最可靠的——它是本文档中的 #2 (
对我有用的第二件事是使用 reactiveTimer
(https://shiny.rstudio.com/reference/shiny/0.14/reactiveTimer.html)。
无论如何,如果你一直在用这个来撞墙,这是一个棘手的问题,对我们许多人来说都是麻烦。祝你好运,为你的上下文选择最佳解决方案。