R Shiny Реактивный входной файл с условиями - PullRequest
0 голосов
/ 01 декабря 2019

Я использую R блестящий, чтобы построить панель мониторинга, которая состоит из двух таблиц и сравнивает их, чтобы получить некоторые результаты. Когда я сделал это для одного шаблона, он работает просто отлично. Но когда я пытаюсь добавить два разных типа сравнения на основе входного параметра, он не проходит. Вот что я делал на сервере. R изначально (и который работает),

report1 <- eventReactive(input$Report1, {
read.csv(input$Report1$datapath)

report2 <- eventReactive(input$Report2, {
read.csv(input$Report2$datapath)

Где Report1 и Report2 - входные файлы, поступающие из ui.R. Я хочу добавить параметр, который будет определять, как обрабатывать входной файл. Скажем, два метода обработки называются «Method1» и «Method2». Я не могу использовать один и тот же метод для вызова обоих типов, так как второй набор файлов имеет формат .crm, который является ";"отдельный файл, который R не распознает напрямую. Чтобы быть понятным, следующий код прекрасно работает для файла .crm при запуске без сервера.

File <- read.csv(file, sep = ";", header = TRUE)

Так что я хочу сделать, это

handlingMethod <- reactive(input$Method)

if (handlingMethod() == "Method1"){

    report1 <- eventReactive(input$Report1, {
    read.csv(input$Report1$datapath)})

    report2 <- eventReactive(input$Report2, {
    read.csv(input$Report2$datapath)})

} else if (handlingMethod() == "Method2"){

    report1 <- eventReactive(input$Report1, {
    read.csv(input$Report1$datapath,sep = ";", header = TRUE)})

    report2 <- eventReactive(input$Report2, {
    read.csv(input$Report2$datapath, sep = ";", header = TRUE)})
} else {}

Но это дает мне ошибку«Вы пытались сделать что-то, что можно сделать только из реактивного выражения или наблюдателя». Я думал, что понял эту проблему и решил ее, но, видимо, нет. Затем я поместил все это в реактивное выражение следующим образом:

reactive({if (handlingMethod() == "Method1"){

            report1 <- eventReactive(input$Report1, {
            read.csv(input$Report1$datapath)})

            report2 <- eventReactive(input$Report2, {
            read.csv(input$Report2$datapath)})

        } else if (handlingMethod() == "Method2"){

            report1 <- eventReactive(input$Report1, {
            read.csv(input$Report1$datapath,sep = ";", header = TRUE)})

            report2 <- eventReactive(input$Report2, {
            read.csv(input$Report2$datapath, sep = ";", header = TRUE)})
        } else {}})

, который запускает блестящее приложение, но затем показал мне сообщение "Ошибка в отчете1: не удалось найти функцию" report1 ""

Кто-нибудь видел подобную ошибку раньше? Если это так, я буду благодарен, если вы скажете мне, что это такое.

...