Как вызвать столбец из фрейма данных, созданного реагирующей () в R блестящий? - PullRequest
0 голосов
/ 24 января 2020

Предположим, у меня есть текстовый файл, такой как:

    df<-data.frame(x=rnorm(9), 
               y=rep(LETTERS[1:3], each=3), 
               z=rep(LETTERS[4:6], each=3))
    write.table(df, "test.txt")

Я хотел, чтобы пользователь мог ввести выбранный столбец, например y, а затем выбрать два уровня, level0, level1 из раскрывающихся опций столбца (например, A, B, C в столбце y). Я попробовал следующий сценарий:

library(shiny)

ui <- fluidPage( textInput("design", "Column to pick", " "),
                 uiOutput("level0"),
                 uiOutput("level1")
             )

server <- function(input, output) {
  ##main results output
  datobj <- reactive({
    dat <- read.table(input$file)
    return(list(x=dat$x, 
                y=dat$y))
  })

  output$level0 <- renderUI({
    selectInput("ref0", "Reference group", datobj()[["y"]])
  })

    output$level1 <- renderUI({
    selectInput("ref1", "Study group", datobj()[["y"]])
  })

}

shinyApp(ui, server)

Я застрял все утро для этого, а также для некоторых онлайн-сообщений, таких как здесь , но все еще не могу заставить его работать. Некоторые предложения?

1 Ответ

1 голос
/ 25 января 2020

Может быть, это то, что вы ищете.

Я добавил fileInput для выбора файла для загрузки. Кроме того, я изменил textInput на selectInput, чтобы вы могли выбрать столбец вместо его ввода.

observe обновит ваш selectInput после загрузки файла, а имена столбцов будут использоваться в качестве выбора для design.

. output будет подмножество данных на основе выбора input$design. Я не уверен, что это было то, что вы хотели.

library(shiny)

ui <- fluidPage( fileInput('file1', 'Choose File'),
                 selectInput("design", "Column to pick", " "),
                 uiOutput("level0"),
                 uiOutput("level1")
)

server <- function(input, output, session) {

  dataobj <- reactive({
    inFile <- input$file1
    if (is.null(inFile))
      return(NULL)
    tbl <- read.table(input$file1$datapath)
    return(tbl)
  })

  observe({
    updateSelectInput(session, "design", choices = names(dataobj()))
  })

  output$level0 <- renderUI({
    selectInput("ref0", "Reference group", dataobj()[[input$design]])
  })

  output$level1 <- renderUI({
    selectInput("ref1", "Study group", dataobj()[[input$design]])
  })

}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...