有没有一种简单的方法可以从上传的数据集中生成一部分UI?

时间:2019-02-11 14:21:04

标签: r shiny

我正在建立一个闪亮的应用程序,该应用程序请求一个数据集,询问有关所述数据集的信息,然后在考虑到有关数据集的信息(例如名称)的情况下,对所述数据集运行一系列分析模型在回归中要调整的变量数)。该应用程序从带有数据上传输入的简单UI开始。用户上传数据后,我希望UI动态添加一个新部分,要求用户从数据集的列标签中选择变量的子集。

我正在通过Linux AWS计算机使用RStudio服务器。

我的应用程序是作为另一个R包的附件生成的,该R包充当我所需的大多数统计功能的包装。由于该应用程序非常大,因此UI由一些标准文本和一系列为UI调用tabItems的函数组成。

在下面的示例中,UI具有标准的数据上传用户输入。除此之外,我还尝试在服务器端使用Shiny :: renderUI来获取用户提供的数据集,读取列,然后通过Shiny :: varSelectInput()返回列集。不幸的是,我的应用程序在上传数据后未提供此新输入。

ui_data_1 <- function(){

y<-tabItem(tabName = "load_dat",
  shiny::tabsetPanel(type = "tabs",
      # Data upload ---- -
      h2("Data"),
      p("Please upload your data file"),
      shiny::fileInput(
        inputId = "data_file", label = "Upload patient data file (.csv Only)",
        accept = c(".csv")
      ),
      h2("Treatment"),
    p("Instructions for treatment"),
    shiny::uiOutput("variables"))
)
)
return(y)
}   


server_data_1 <- function(){

 y <- shiny::renderUI({
 inFile <- input$data_file

 # Load data
 if (is.null(inFile)) {
   df <- shiny::reactive({NULL})
 } else {
   df <-  shiny::reactive({read.csv(inFile$datapath, header = input$header)})
 }

 varnames <- colnames(df())

 shiny::varSelectInput(
   inputId = "treat",
   label = "Treatment Variable",
   data = c(varnames)
 )
})
return(y)
}

#UI.R
body <- shinydashboard::dashboardBody(
     ui_data_1()
)
ui <- shinydashboard::dashboardPage(header, sidebar, body, skin = "black")

#Server.R
server <- function(input, output) {
  output$variables  <- server_data_1()
}



shiny::shinyApp(ui, server)

应用正确加载,数据上传菜单也正确加载。上载数据时,我收到一条通知,指示上载成功。与inputId =“ treat”关联的标签在整个时间内都是可见的。但是,按预期上传数据后不会填充变量选择菜单。也许我做错了什么。在此先感谢您的任何建议。

0 个答案:

没有答案