比较两个下拉列表中的CSV文件

时间:2019-07-11 02:21:52

标签: r shiny shinydashboard shiny-server

如何使用带有两个下拉菜单的./data文件夹中的csv文件创建闪亮的应用程序,然后读取这些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 个答案:

答案 0 :(得分:1)

从这里我可以看到,您正在做的是正确创建了反应性数据集对象数据集(对于其中一个输入文件,虽然不是两个),但是您没有使用它稍后,当您要生成差异表时(它又需要作为一个反应组件,因为它将由2个反应组件- dataset1 dataset2 生成)。

类似的事情应该可以解决问题(将其包装在服务器函数中):

# 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()
})

检查以上内容,让我知道它对您的影响。