0

我在获取 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


  })

“组”列使用硬编码值进行过滤。我的目的是通过获取“Grp”的值来使其动态化。下图显示了问题

在此处输入图像描述

完整代码如下

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))
4

1 回答 1

0

欢迎来到这里的网站。这也是我最近遇到的一个问题——它似乎不是孤立的,selectizeInput而是与你试图让你的 Shiny 应用程序“看到”的任何新数据有关。这里有几件事可以尝试:

  1. 删除_cache闪亮服务器根目录中的所有目录,然后尝试再次加载。如果没有区别,
  2. touch文件(或在.csvWindows 上进行编辑,以获得新的时间戳),然后尝试再次加载。如果没有区别,
  3. 重新启动闪亮服务器,sudo systemctl restart shiny-server最后一个参数是闪亮服务器的名称(默认为shiny-server

最后一个解决方案对我来说是最可靠的解决方案——它是本文档中的#2(闪亮的应用程序不反映更新 RData 文件中的更改)——从命令行重新启动闪亮的服务器。这工作可靠且常规。此解决方案中的其他想法在我的机器上不起作用,因此必须取决于您的服务器或客户端规范。

对我有用的第二件事是使用reactiveTimerhttps://shiny.rstudio.com/reference/shiny/0.14/reactiveTimer.html)。

无论如何,如果你一直在用这个来敲打你的头,这是一个棘手的问题,对我们许多人来说都是麻烦的。祝您好运,为您的环境选择最佳解决方案。

于 2018-10-13T03:29:05.143 回答