从数字输入字段生成的闪亮/ R访问数据

时间:2018-12-05 19:44:41

标签: r shiny

我很难弄清楚如何使用通过数字输入在Shiny中生成的数据。我想要的是生成一个输入值的表,然后能够在随后的分析中使用该结果DataFrame。目前,我可以生成表,但是看不到要从表中访问值进行任何分析。感谢您的协助!

library(shiny)
library(DT)
library(tidyverse)


# Define UI for data upload app ----
ui <- fluidPage(

# App title ----
titlePanel(title = h1("Variable Selection", align = "center")),

# Sidebar layout with input and output definitions ----
sidebarLayout(

# Sidebar panel for inputs ----
sidebarPanel(

  # Input: Select a file ----
  fileInput("uploaded_file", "Choose CSV File",
            multiple = TRUE,
            accept = c("text/csv",
                       "text/comma-separated-values,text/plain",
                       ".csv")),

  # Horizontal line ----
  sliderInput("months", "Forecast Months:",
              min = 0, max = 60,
              value = 1),
  tags$hr(),

  # Input: Checkbox if file has header ----
  checkboxInput("header", "Header", TRUE),


  # Input: Select separator ----
  radioButtons("sep", "Separator",
               choices = c(Semicolon = ";",
                           Comma = ",",
                           Tab = "\t"),
               selected = ","),


  # Horizontal line ----
  tags$hr(),

  # Input: Select number of rows to display ----
  radioButtons("disp", "Display",
               choices = c(All = "all",
                           Head = "head"),
               selected = "all"),

  # Select variables to display ----
  uiOutput("checkbox")


),

# Main panel for displaying outputs ----
mainPanel(
  uiOutput("input_ui"),
  DT::dataTableOutput("table")
)
)
)


# Define server logic to read selected file ----
server <- function(input, output, session) {

# Read file ----
df <- reactive({
  req(input$uploaded_file)
  read.csv(input$uploaded_file$datapath,
         header = input$header,
         sep = input$sep)  

})

 # Dynamically generate UI input when data is uploaded ----
   output$checkbox <- renderUI({
       checkboxGroupInput(inputId = "select_var", 
                   label = "Select variables", 
                   choices = setdiff(names(df()), input$select_dev),
                   selected = setdiff(names(df()), input$select_dev))
 })

 # Select columns to print ----
   df_sel <- reactive({
   req(input$select_var)
   df_sel <- df() %>% select(input$select_var) 
 })

  #This code generates numeric input fields based on the variables selected, and then renders a table, but I cannot see to access the data placed in the table.

 output$input_ui <- renderUI({
   pvars <- df_sel()
   varn = names(df_sel())
   lapply(seq(pvars), function(i) {
   numericInput(inputId = paste0("range", pvars[i]),
               label = names(df_sel()),
               value = 0)
   })

  })

  output$table <- DT::renderDataTable(({
   pvars <- df_sel()
   num = as.integer(ncol(pvars))
   print(num)
   pred <- data.frame(lapply(1:num, function(i) {
     input[[paste0("range", pvars[i])]]

  }))
   n = input$months
   pd = data.frame(pred, i=rep(1:n,ea=NROW(input$months)))
   pd[1:(length(pd)-1)]


  }), rownames=FALSE)

 }



 shinyApp(ui = ui, server = server)

0 个答案:

没有答案