selectInput基于上传csv文件的列

时间:2018-04-30 14:25:05

标签: r shiny

我正在尝试构建一个闪亮的应用程序,我可以上传一个csv文件,并根据列名称,从program: program.o lib/libjp.a lib/libgr.so - 应用程序显示基本统计信息(图形,描述性统计平均值,sd,var ...和一些统计测试)。 数据集没有问题,这些数据集已经在应用中。统计数据也没问题。 问题是如何使用新上传的csv文件中的列名来使libjp.a: pj.o pp.o libgr.so: pg.o pr.o 工作。

这是我的代码轻量级版本:

用户界面:

selectInput

SERVER:

selectInput

2 个答案:

答案 0 :(得分:1)

您需要使用uiOutput()和renderUI()函数。

library(shiny)

ui <- fluidPage(
  titlePanel("xxx"),

  sidebarLayout(
    sidebarPanel(
      fileInput("csvFile", "Drag cars.csv over here!"),
      uiOutput("var_ui")
    ),

    mainPanel(
      textOutput("average"),
      plotOutput("plot")
    )
  )
)

server <- function(input, output, session) {
  data <- reactive({
    file1 <- input$csvFile
    if (is.null(file1)) { 
      return() 
    } 
    data = read.csv(file=file1$datapath)
    data
  })
  output$average <- renderText({
    paste("average is: ", mean(data()[,input$var]))
  })
  output$plot <- renderPlot({
    boxplot(data()[,input$var])
  })

  output$var_ui <- renderUI({
    selectInput("var", "choose variable:", choices= names(data()))
  })
}

shinyApp(ui, server)

答案 1 :(得分:0)

您还可以在服务器中使用observeobserve不返回任何内容。与reactive不同,它立即(而不是延迟)响应。最好用于ip / op操作。

observe({
  updateSelectInput(
    session,
    "var",
    choices = names(data())
  )
)}