R Shiny可以用于导入文件,运行R脚本和导出文件吗?

时间:2018-10-23 14:00:11

标签: r shiny

感谢您的时间。

这是一个很小的一般性问题,我希望它不会重复。我四处张望,却找不到我问题的确切答案。

我对R Shiny的功能有疑问。我以前从未使用过R Shiny,并且想知道它是否可以解决我遇到的与业务相关的问题。

我创建了一个R脚本,用于接收导入的文件,对其进行处理并导出一个新文件。

我的问题是:R Shiny是否可以用于构建可以在基于Web的设置中完成所有这些操作的应用程序?

特别是,我希望其他人不必使用R即可运行我的R脚本。如果R Shiny能够执行此操作,则可以解决我的问题。

感谢您的时间!

2 个答案:

答案 0 :(得分:2)

这是我的第一个答案,但是我和Shiny一起工作很多。

当然,您可以按照要求做。您只需要合并fileInput函数和downloadButton / downloadLink。

https://shiny.rstudio.com/reference/shiny/1.0.4/downloadButton.html

https://shiny.rstudio.com/gallery/file-upload.html

在这里,我写了一个简单的示例,您只需要复制并保存名称为app.R即可:

library(shiny)

# Define UI for data upload app ----
ui <- fluidPage(

  # App title ----
  titlePanel("Welcome to Ethar data transformation app"),
  # App subtitle
  h4(HTML("Upload your file and click the Download button")),


  # Sidebar layout with input and output definitions ----
  sidebarLayout(

    # Sidebar panel ----
    sidebarPanel(

      # Input: Select a file ----
      fileInput("fileUploaded", "Choose CSV File",
                multiple = FALSE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),

      # Output: Download a file ----
      downloadButton('downloadFile', 'Process the file & Download', class= "action"),

      # CSS style for the download button ----
      tags$style(type='text/css', "#downloadFile { width:100%; margin-top: 35px;}")


    ),

    # Main panel for displaying outputs ----
    mainPanel(

      # Output: Data file ----
      textOutput("done")

    )
  )
)
# Define server logic to read selected file ----
server <- function(input, output) {


  # Download handler in Server
  output$downloadFile <- downloadHandler(
    filename = function() {
      paste('dataProcessed-', Sys.Date(), '.csv', sep='')
    },
    content = function(con) {
      originalData <- input$fileUploaded
      ##############################
      # Transformations in originalData object
      ##############################
      dataProcesed <- originalData
      write.csv(dataProcesed, con)
      output$done <- renderText({
        ifelse(!is.null(dataProcesed),"Transformation done! :D","Error during the process :(")
      })
    }
  )


}

# Create Shiny app ----
shinyApp(ui, server)

希望有帮助! :)

答案 1 :(得分:1)

是的,shiny可以做到这一点,用户可以输入文件,可以在反应式功能中运行转换,并在页面上创建下载按钮。您还可以使用HTML和CSS功能以及javascript随意设置页面格式。

有关更多信息,您可以看到:Help users download data from your appHelp users upload files to your app