Я пытаюсь сделать простое приложение для сравнения двух файлов R - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь использовать функцию diffR, чтобы принять два файла .R, чтобы сравнить различия в блестящем приложении.Где кто-то может загрузить два файла R, а затем он будет использовать diffR для вывода.

Я могу запустить свой код локально, где я определяю свой файл один и файл два как каталоги локально, а затем я получу вывод кода рядом, чтобы показать различия.Это подчеркивает различия, и тогда могут быть сделаны корректировки.

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

    output$contents <- renderPrint({
    info_old <- input$old_file

    if(is.null(info_old))
        return(null)

    df_old <- readLines(info_old$datapath)
    df_old
})

    output$new_contents <- renderPrint({


    info_new <- input$new_file
    if(is.null(info_new)){return()}

    df_new <- readLines(info_new$datapath)
    df_new
})
    output$exdiff <- renderDiffr({
        diffr(info_old(), info_new(), wordWrap = input$wordWrap,
              before = "Original_File", after = "New File")
    })
}

Я знаю это просто, когда и old_file, и new_file генерируются на стороне.Этот ответ на стек показывает именно то, что я ищу:

В R найдите, отличаются ли два файла

Где используется пакет diffr.Я просто хочу, чтобы у пользователя была возможность загружать два файла R, поэтому проводите параллельное сравнение, а не определяйте файлы a и b глобально.

1 Ответ

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

Вы можете использовать путь к данным, указанный в загруженных файлах: input$files[[1, 'datapath']].

Если хотите, небольшое замечание о вашей (хорошей) попытке. Функция diffr() требует подключения к файлу, а не самого содержимого. Я тоже попал в ту же ловушку. Так что, если вы удалите readLines() в своем коде, вы должны быть довольно близко.

Возможно, вы захотите включить тест, чтобы длина загружаемых файлов была не меньше или не превышала 2, чтобы убедиться, что приложение не падает, например, если дается только один файл.

Воспроизводимый пример:

write.csv2(
  x = "diff same", 
  file = "test.csv"
)

write.csv2(
  x = "diffhere same", 
  file = "test2.csv"
)


ui <- fluidPage(
  sidebarLayout(
    sidebarPanel(
      fileInput(
        inputId = "files", 
        label = "Choose CSV File", 
        multiple = TRUE,
        accept = c("text/csv",
                  "text/comma-separated-values,text/plain",
                  ".csv")
      )
    ),
    mainPanel(
      tableOutput("contents"),
      diffrOutput("exdiff")
    )
  )
)

server <- function(input, output) {
  output$exdiff <- renderDiffr({
    req(input$files)

    diffr(
       file1 = input$files[[1, 'datapath']], 
       file2 = input$files[[2, 'datapath']], 
       wordWrap = TRUE,
       before = "f1", 
       after = "f2"
    )
  })
}

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