Как добавить динамическое содержимое под этими вкладками, создавайте с помощью renderUI в приложенииinyR - PullRequest
0 голосов
/ 25 августа 2018

Я создаю приложение в блестящем R, где пользователи могут выбирать нужные вкладки, и под ним будут отображаться данные, относящиеся к этим вкладкам.

Например, в приведенном ниже примере приложения данные mtcars в.csv будет принят в качестве входного параметра. Пользователь может выбрать необходимые имена столбцов в поле вкладок. Эти столбцы будут созданы в виде вкладок.

Теперь я хочу показать данные, относящиеся к этому столбцу, из .csv в соответствующемtab.Say, скажем, данные из столбца 'mpg' будут показаны на вкладке 'mpg'.

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

Примеры используемых кодов приведены ниже:

write.csv(mtcars,'mtcars.csv')

#
library(shiny)
library(plyr)
library(dplyr)

ui <- pageWithSidebar(
    headerPanel = headerPanel('data'),
    sidebarPanel = sidebarPanel(fileInput(
            'mtcars', h4('Uplaodmtcardata in csv format')
    ),
    uiOutput('tabnamesui')),
    mainPanel(uiOutput("tabsets"))
   )

  server <- function(input, output, session) {
     mtcarsFile <- reactive({input$mtcars})




    xxmtcars <-
            reactive({
                    read.table(
                            file = mtcarsFile()$datapath,
                            sep = ',',
                            header = T,
                            stringsAsFactors = T
                    )
            })

    tabsnames <- reactive({
            names(xxmtcars())
    })

    output$tabnamesui <- renderUI({
            req(mtcarsFile())
            selectInput(
                    'tabnamesui',
                    h5('Tab names'),
                    choices = as.list(tabsnames()),
                    multiple = T
            )


    })
    tabnamesinput <- reactive({
            input$tabnamesui
    })

    output$tabsets <- renderUI({
            req(mtcarsFile())
            tabs <-
                    reactive({
                            lapply(tabnamesinput(), function(x)
                                    tabPanel(title = basename(x), dataTableOutput(x)))
                    })
            do.call(tabsetPanel, c(tabs()))
    })

    output[['mpg']] <-
            renderDataTable(as.data.frame(select(xxmtcars(), mpg)))#HOW TO AVOID THIS HARD CODING..?BASED ON THE TAB NAME DATA FROM RELEVANT COLUMN IN THE CSV TO BE RETURNED.

} runApp (список (ui = ui, сервер = сервер))

#

1 Ответ

0 голосов
/ 25 августа 2018

Попробуйте это

library(shiny)
library(plyr)
library(dplyr)
library(rlang)
library(DT)
ui <- pageWithSidebar(
  headerPanel = headerPanel('data'),
  sidebarPanel = sidebarPanel(fileInput(
    'mtcars', h4('Uplaodmtcardata in csv format')
  ),
  uiOutput('tabnamesui')),
  mainPanel(uiOutput("tabsets"))
)

server <- function(input, output, session) {
  mtcarsFile <- reactive({input$mtcars})




  xxmtcars <-
    reactive({
      read.table(
        file = mtcarsFile()$datapath,
        sep = ',',
        header = T,
        stringsAsFactors = FALSE
      )
    })

  tabsnames <- reactive({
    names(xxmtcars())
  })

  output$tabnamesui <- renderUI({
    req(mtcarsFile())
    selectInput(
      'tabnamesui',
      h5('Tab names'),
      choices = as.list(tabsnames()),
      multiple = T
    )


  })
  tabnamesinput <- reactive({
    input$tabnamesui
  })

  output$tabsets <- renderUI({
    req(mtcarsFile())

    tabs <-
      reactive({
        lapply(tabnamesinput(), function(x)
          tabPanel(title = basename(x), dataTableOutput(x)))
      })
    do.call(tabsetPanel, c(tabs()))
  })


observe(
  lapply(tabnamesinput(), function(x) {
    output[[x]] <- DT::renderDataTable({
t<-as.data.frame(dplyr::select(xxmtcars(), !! sym(x)) )
   print(t)
   datatable(t)

    })
  })
)
}


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