ฉันพยายามหาวิธีใช้ downloadButton เพื่อบันทึกพล็อตด้วยเงา ตัวอย่างในแพ็คเกจแสดงให้เห็นถึง downloadButton / downloadHandler เพื่อบันทึกไฟล์. csv ฉันจะสร้างตัวอย่างที่ทำซ้ำได้ตามนั้น
สำหรับ ui.R
shinyUI(pageWithSidebar(
headerPanel('Downloading Data'),
sidebarPanel(
selectInput("dataset", "Choose a dataset:",
choices = c("rock", "pressure", "cars")),
downloadButton('downloadData', 'Download Data'),
downloadButton('downloadPlot', 'Download Plot')
),
mainPanel(
plotOutput('plot')
)
))
สำหรับ server.R
library(ggplot2)
shinyServer(function(input, output) {
datasetInput <- reactive({
switch(input$dataset,
"rock" = rock,
"pressure" = pressure,
"cars" = cars)
})
plotInput <- reactive({
df <- datasetInput()
p <-ggplot(df, aes_string(x=names(df)[1], y=names(df)[2])) +
geom_point()
})
output$plot <- renderPlot({
print(plotInput())
})
output$downloadData <- downloadHandler(
filename = function() { paste(input$dataset, '.csv', sep='') },
content = function(file) {
write.csv(datatasetInput(), file)
}
)
output$downloadPlot <- downloadHandler(
filename = function() { paste(input$dataset, '.png', sep='') },
content = function(file) {
ggsave(file,plotInput())
}
)
})
หากคุณกำลังตอบคำถามนี้คุณอาจคุ้นเคยกับคำถามนี้ แต่เพื่อให้สามารถใช้งานได้ให้บันทึกด้านบนลงในสคริปต์แยกกัน ( ui.R
และserver.R
ลงในโฟลเดอร์ ( foo
) ภายในไดเร็กทอรีการทำงานหากต้องการเรียกใช้แอปเงาให้เรียกใช้runApp("foo")
ในการเรียกใช้แอพพลิเคเงาวิ่ง
เมื่อใช้ggsave
ฉันได้รับข้อความแสดงข้อผิดพลาดที่ระบุว่า ggsave ไม่สามารถใช้filename
ฟังก์ชันนี้ได้ (ฉันคิดว่า) หากฉันใช้อุปกรณ์กราฟิกมาตรฐาน (เช่นด้านล่าง) ไฟล์Download Plot
ทำงานได้โดยไม่มีข้อผิดพลาด แต่ไม่ได้เขียนกราฟิก
คำแนะนำใด ๆ ในการดาวน์โหลด
ggsave(file, plotInput(), device = png)
แทนการสร้างฟังก์ชันอุปกรณ์ (เสื้อคลุม) ได้อีกด้วย