2016-02-08 3 views
0

Пожалуйста, обратите внимание на следующее:использованием downloadHandler и renderPlot на статической функции одновременно

# createPlot takes in data, processes it and generates a plot using native plot() 
    plotInput <- function(){  
    createPlot(data=data(),name=input$name) 
    } 

# I render it using 
output$plot <- renderPlot({ 
    plotInput() 
    }, height=700,width=850,res=100) 

# and I download the pdf using 
output$pdflink <- downloadHandler(
     filename <- "plot.pdf", 
     content <- function(file){ 
     pdf("plot.pdf") 
     print(plotInput()) 
     dev.off() 
     file.copy("plot.pdf", file) 
     } 
) 

createPlot функция имеет randomising фактор, который заполняет пустые значения с небольшой случайной pseudocount. Таким образом, всякий раз, когда эта функция запускается, точки на графике не совсем одинаковы, поэтому загруженный сюжет немного отличается от того, что я вижу на интерфейсе. Что я могу сделать, чтобы решить эту проблему?

Я попытался сохранить вывод plotInput() статической переменной и повторно использовать эту переменную как для рендеринга, так и для экспорта, но это не работает.

mainPlot <- plotInput() 

ответ

0

Я решил его, создав статический pdf-график который я преобразовал в .png с помощью ImageMagick и тонированный преобразованного изображения в браузер с помощью renderImage

# createPlot takes in data, processes it and generates a plot using native plot() 
    plotInput <- reactive({  
    createPlot(data=data(),name=input$name) 
    }) 

# I render it using 
    output$plot <- renderImage({ 
    pdf("plot.pdf") 
    print(plotInput()) 
    dev.off 
# R wrapper for imagemagick 
    im.convert('plot.pdf',output='plot.png',extra.opts="-density 250 -quality 100") 
    list(src='plot.png', 
    contentType='image/png', 
    alt='emptyPlot') 
    },deleteFile=FALSE) 

# and I download the pdf using 
    output$pdflink <- downloadHandler(
     filename <- "plot.pdf", 
     content <- function(file){ 
     file.copy("plot.pdf", file) 
     } 
    ) 
1

Вместо того, чтобы plotInput функцию, попробуйте сделать это в «реактивный». Блестящий должен обнаружить, что при печати в файл нет необходимости перезапускать реактивную, если ни один из ее входов не изменился, и поэтому рендеринг и PDF должны использовать один и тот же график

+0

Спасибо за ваш ответ. 'plotInput' раньше я имел как реактивную функцию, но проблема была во время загрузки, никакой сюжет не создавался, и это все еще так. Итак, если я преобразую 'plotInput' в реактивную функцию,' downloadHandler' возвращает файл, но его пуст. Участок не генерируется. –

 Смежные вопросы

  • Нет связанных вопросов^_^