Блестящее приложение: downloadHandler не создает файл
Я не могу понять, что происходит - все работает, но мое приложение не создает файл, хотя похоже, что это так.
Я запускаю его в Windows, на RStudio 0.98.125, и я запускаю его, используя строку:
runApp()
Ниже приведен очень простой воспроизводимый пример:
my 'ui.R':
shinyUI(pageWithSidebar(
headerPanel("My App"),
sidebarPanel(
numericInput('NumRuns','Number of runs',value=3,min=3,max=10,step=1),
actionButton(inputId="goButton","Run!"),
textInput("downloadData","Save My Data Frame:",value="Data Frame 1"),
downloadButton('downloadData','Save my file!')
),
mainPanel(
tabPanel("Some Text",
h4(textOutput("caption2")),
tableOutput("mydf"),
value=3))
))
my 'server.R':
shinyServer(function(input,output){
# Creating files for download at the end
myout = reactive({
if(input$goButton==0) return(NULL)
nrruns=input$NumRuns
mylist=NULL
for(i in 1:nrruns){
mylist[[i]]<-data.frame(a=rnorm(10),b=runif(10))
names(mylist)[i]<-paste("dataframe",i,sep="")
}
return(mylist)
})
output$mydf <- renderTable({
if(input$goButton==0) return(NULL)
input$goButton
isolate(
myout()$dataframe1
)
})
output$downloadData <- downloadHandler(
filename = function() { paste(input$downloadData, " ",Sys.Date(),".csv",sep="") },
content = function(file) {
write.csv(myout()$dataframe1,file,row.names=F)
}
)
})
Ответы
Ответ 1
Примечание. Кнопка загрузки не работает в средстве просмотра RStudio. Ваш
друг может использовать средство просмотра RStudio для просмотра приложения. Если это
в случае, пожалуйста, откройте приложение во внешнем веб-браузере (есть
выпадающий список справа от кнопки "Запустить приложение": "Запустить в окне",
Запуск в панели просмотра, запуск внешнего; выберите последний).
Ответ 2
Приведенный пример отлично подходит для загрузки CSV в моих тестах (если это из веб-браузера, который является, используя приложение "Запуск" в RStudio, вызывают такую же проблему)
Обратите внимание, что если вы сохраняете что-то вроде "download.html" из вашей кнопки загрузки вместо загруженного контента, вы должны убедиться, что идентификатор из downloadButton ( "myIdHere",...) соответствует выходу $myIdHere = downloadHandler ( "output.csv",...)
Также обратите внимание, что если вы используете блестящие модули (вы, вероятно, знаете, используете ли вы это), то вы хотите использовать downloadButton (ns ( "myIdHere" ),...), а затем у вас все еще есть выход $myIdHere
Ответ 3
Проблема заключается в том, что вы определяете имя файла как функцию, тогда как функция downloadHandler ожидает аргумент имени файла как строку.
Попробуйте это вместо:
output$downloadData <- downloadHandler(
filename = paste0("download_", Sys.Date(),".csv"),
content = function(file) {
write.csv(myout()$dataframe1,file,row.names=F)
}
)
Ответ 4
Добавление к тому, что сказал Колин Д. Это может быть просто, что ваш idNAME слишком длинный.
Я только что тестировал в своем приложении, что ЭТО РАБОТАЕТ:
output$download_mastergroup <- downloadHandler(...) #server side
downloadButton('download_mastergroup ', 'Download overview') #ui side
и что ЭТО НЕ РАБОТАЕТ:
output$download_mastergroup_overview <- downloadHandler(...) #server side
downloadButton('download_mastergroup_overview ', 'Download overview') #ui side
Итак, будьте краткими, и все будет хорошо!