Сравнить CSV файлы из двух выпадающих Rshiny - PullRequest
0 голосов
/ 11 июля 2019

Как я могу создать блестящее приложение с двумя выпадающими меню с файлами CSV из папки ./data, затем прочитать эти CSV и сравнить различия?

Пользователь выбирает CSV из двух выпадающих меню, затем автоматически генерирует различия

UI.R

library("shiny")

ui <- fluidPage(
  fluidPage(
    titlePanel("Automated Data Dictionary Comparison"),
    sidebarLayout(

      sidebarPanel(

        selectInput(inputId = 'Dic1',
                    label = 'Choose First Data Dictionary:',
                    choices = list.files(path = "./data",
                                         full.names = FALSE,
                                         recursive = FALSE)),
        selectInput(inputId = 'Dic2',
                    label = 'Choose Second Data Dictionary:',
                    choices = list.files(path = "./data",
                                         full.names = FALSE,
                                         recursive = FALSE))
      ),

      mainPanel(
        tableOutput('contents')
      )
    )
  )
)

SERVER.R

Library(shiny)
library(dplyr)

 server <-  function(input, output) {

   dataset <- reactive({
     infile <- input$Dic1

     if (is.null(infile)){
       return(NULL)
     }
     read.csv(infile[[1]])
   })

   output$contents <- renderDataTable({

     #x <- dataset()
     Diff <- render_diff(diff_data(data_ref=input$DIC1, data = input$DIC2),
     Diff
   })

 }

1 Ответ

1 голос
/ 11 июля 2019

Из того, что я вижу здесь, вы делаете то, что вы правильно создаете свой реактивный объект набора данных набор данных (для 1 из ваших входных файлов, хотя не для обоих), но вы не используете это позже когда вы хотите сгенерировать таблицу различий (которая снова должна быть реактивным компонентом, поскольку она будет сгенерирована из 2 реактивных компонентов - набор данных1 и набор данных2 ).

Что-то вроде этого должно сработать (оберните это внутри функции сервера):

# Parse first file
dataset1 <- reactive({
  infile <- input$Dic1

  if (is.null(infile)){
    return(NULL)
  }
  x <- read.csv(infile[[1]])
  x
})
# Parse second file
dataset2 <- reactive({
  infile <- input$Dic2

  if (is.null(infile)){
    return(NULL)
  }
  x <- read.csv(infile[[1]])
  x
})
# Create comparison table (reactive as both of its elements are reactive)
diff <- reactive({
  x <- render_diff(diff_data(data_ref=dataset1(), data=dataset2()))
  x
})
#Output
output$contents <- renderDataTable({
  diff()
})

Проверьте все вышесказанное и дайте мне знать, как у вас дела.

...