Создайте блестящее приложение для загрузки набора данных Stata и конвертируйте его в файл SPSS - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь создать блестящее приложение, позволяющее людям загружать файл, и веб-страница выполняет функцию rio::convert(), чтобы преобразовать файл .dta в файл .sav.

Это возможно? Как можно кодировать UI и server?

Я предпринял попытку:

ui.R

## -----
## ui.R
## -----

library(shiny)
library(markdown)

shinyUI(fluidPage(sidebarLayout(

  sidebarPanel(fileInput('infile', label = "Datos en Stata (Máx. 30 MB)", buttonLabel = "Subir..."),
               downloadButton('downloadData', 'Bajar Base')
  ),
  mainPanel(
    h3("Muestra de Datos"),
    tableOutput("contents")
    )
)))

server.R

options(shiny.maxRequestSize = 30*1024^2)
## --------
## server.R
## --------

library(rio)
library(shiny)
library(tools)
library(foreign)

server <- function(input, output) {
    getData <- reactive({
    inFile <- input$infile
    if (is.null(input$infile))
      return(NULL)
      rio::import(inFile$datapath)
  })
    getData_proc <- reactive({
      rio::export(file= "data.sav", x=getData())
      })
  output$contents <- renderTable(
    head(getData())
  )
  output$downloadData <- downloadHandler(
    filename = function() {
      paste("data", Sys.Date(), ".sav", sep="")
    },
    content = function(x) {
   #   rio::convert(input$infile$datapath, "mtcars.sav")
      #https://www.rdocumentation.org/packages/rio/versions/0.5.16/topics/export
      #https://stackoverflow.com/questions/57493392/how-to-fix-file-not-found-when-using-the-downloadhandler
      rio::export(getData(),file=x)
    }
)  
}

Предварительно веб-страница выглядит как this . Моя основная проблема заключается в том, что когда я загружаю файл и пытаюсь загрузить его, файл, в который я могу загрузить текстовый файл, который при загрузке показывает следующую ошибку: «Ошибка - проблема с сервером» .

Вы можете увидеть эту проблему здесь: Downloads a text document, that ends with an error

Журнал веб-страницы shinyapps получает следующее сообщение:

Версия сервера : 1.8.0.3-19 R версия: 3.6.2 блестящая версия: 1.4.0

rmarkdown версия: (нет) LANG: es_MX.UTF-8 версия knitr: (нет)

Использование pando c: / opt / connect / ext / pandoc2 версия jsonlite: 1.6 httpuvversion: 1.5.2 версия htmltools: 0.4.0 версия RJSONIO: (нет)

Использование jsonlite для JSON обработка: запуск R с идентификатором процесса: '152'

Прослушивание http://127.0.0.1: 35337 Предупреждение: ошибка в write_sav _:

Ошибка записи: указанное имя начинается с недопустимого символа.

[Нет трассировки стека]:

Заранее спасибо

1 Ответ

0 голосов
/ 04 апреля 2020

На самом деле я обнаружил, что проблема в моем приложении была в моем наборе данных. Эти данные содержали много неформатированных имен, которые я решил, используя функцию clean_names из пакета janitor. Исправленный код представлен ниже:

## --------
## server.R
## --------

library(rio)
library(shiny)
library(tools)
library(foreign)
library(janitor)
library(lubridate)


server <- function(input, output) {
    getData <- reactive({
    inFile <- input$infile
    if (is.null(input$infile))
      return(NULL)
    haven::read_dta(inFile$datapath, encoding = "latin1")
  })
    getData_proc <- reactive({
      if (is.null(input$infile))
        return(NULL)
      janitor::clean_names(getData())
      #names(eso) <- gsub("-|\\.|\\/|'|\\[|\\]","",names(eso))
      #names(eso) <- gsub(" ","_",names(eso))
      })
  output$contents <- renderTable(
    head(getData_proc())
  )
  output$downloadData <- downloadHandler(
    filename = paste0("data_",format(Sys.time(), '%Y_%m_%d'),"_",hour(Sys.time()),"_",minute(Sys.time()),".sav"),
    content = function(x) {
   #   getData_proc()
      #rio::convert(getData(), "mtcars.sav")
      #https://www.rdocumentation.org/packages/rio/versions/0.5.16/topics/export
      #https://stackoverflow.com/questions/57493392/how-to-fix-file-not-found-when-using-the-downloadhandler
      rio::export(getData_proc(),file=x)
    }
)

}
...