Запустите R-код на разных импортированных xlsx-листах в Shiny - PullRequest
0 голосов
/ 13 июня 2018

Я расстроен и нуждаюсь в вашей помощи.

Моя цель - создать приложение блестящий, где вы можете загрузить файл xlsx (как шаблон) с несколькими листами.После этого на этих импортированных листах запускается длинный R-код, который предоставляет выходные данные (подготовленные как data.frames) для таблиц и рисунков, показанных в приложении.

Если я загружаю xlsx-файл слисты локально в R-Shiny (-> без реактивных () переменных, потому что нет FileInput) приложение работает нормально.

Можно ли сохранить различные листы xlsx-файла, загруженного в Shiny, как отдельные data.frames, затем использовать эти data.frames в качестве входных данных для длинного кода R и использовать data.frames, записанные вэтот код R как выход для таблиц и графики?

Несмотря на интенсивное чтение, я далек от (рабочего) решения.

 library(shiny)
 library(readxl)
 library(xlsx)

 runApp(
 list(

 ui = fluidPage(
  titlePanel("Use readxl"),
  sidebarLayout(
    sidebarPanel(
      fileInput('file1', 'Choose xlsx file',
                accept = c(".xlsx")
      )
    ),
    mainPanel(
      tableOutput('contents'))
  )),
    mainPanel(
      tableOutput('contents2'))
  )),


  server = function(input, output){

  storedData1 <- reactiveValues
  storedData2 <- reactiveValues

  reactive(
    storedData1$sheet1 <- input$file1
    if(is.null(inFile))
      return(NULL)
    sheet1 <- read_xlsx(inFile$datapath, sheet =  "Sheet1")

    storedData2$sheet2 <- input$file1
    if(is.null(inFile))
      return(NULL)
    sheet2 <- read_xlsx(inFile$datapath, sheet =  "Sheet2")

    sheet1 <- reactive({
      return(as(storedData2$sheet1(), "data.frame"))
    })

    sheet2 <- reactive({
      return(as(storedData2$sheet2(), "data.frame"))
    })

    source("My.RCode.R", local=TRUE)

    # This My.RCode.R-File is very long. 
    # A simple output for better understanding:
    # sheet3 <- as.datam.frame(rbind(sheet1, sheet2))
    # sheet4 <- as.datam.frame(cbind(sheet1, sheet2))       
    )

    output$contents <- renderDataTable(output_df_from_My.RCode.R()) # or in the example, sheet3

    output$contents2 <- renderDataTable(a_second_output_df_from_My.RCode.R()) # or in the example, sheet4

   }


      )))

Возможно ли что-то подобное?Спасибо за вашу помощь!

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