2016-04-21 130 views
4

我使用plotly包來顯示閃亮的陰謀。在我的本地機器上,情節完美呈現,但是當我在閃亮的服務器上運行閃亮的應用程序時,我收到錯誤「錯誤:無法打開文件'Rplots.pdf'」,情節應該呈現。我已經嘗試過使用dev.off()命令,因爲我已經閱讀了一些其他可能的解決方案,並將其引用爲可能的解決方案。下面我貼我的代碼創建的server.R腳本圖:我使用下面的命令來調用情節Plotly繪製不在閃亮的服務器上呈現

output$recSalesPlot <- renderPlotly({ 
     BWplot_rec <- ggplot(d1, aes_string(x = "End_of_Week", y = input$metric_rec)) 
      BWplot_rec <- BWplot_rec + geom_line(aes(color = Group), size = .25) 
      BWplot_rec <- BWplot_rec + geom_point(aes(color = Group), size = 2) 
      BWplot_rec <- BWplot_rec + xlab("Week") 
      if(input$metric_rec == "NetSales"){ 
       BWplot_rec <- BWplot_rec + ylab("Euros") 
      } 
      BWplot_rec <- BWplot_rec + ggtitle(paste0("Average ", input$metric_rec, " Per Group Per Week")) 
      BWplot_rec <- BWplot_rec + guides(color=FALSE) 
      BWplot_rec <- BWplot_rec + theme(panel.grid.major.y = element_blank(), 
              panel.grid.minor.y = element_blank()) 
      p <- ggplotly(BWplot_rec) 
      p 
      }) 
} 

在ui.R腳本:

plotlyOutput("recSalesPlot", width = "100%", height = 600) 
+0

你有比較本地R的sessionInfo與閃亮的服務器?確保您在閃亮的服務器上擁有所有需要的軟件包。 – MLavoie

+0

我還沒有這樣做,我會這樣做,看看是什麼情況。我的確讀過一個可能的原因是,試圖編寫一個臨時文件,但從服務器訪問時沒有權限,但它從我的本地執行,這可能是爲什麼它可以在我的本地服務器而不是服務器上運行。 – mikew

回答

8

我可以」我說我明白這個問題的根源,或者爲什麼我的解決方案甚至可以爲我工作,但我遇到了同樣的問題,只是在我的腳本開頭添加了pdf(NULL),並且一切看起來都很順利。沒有dev.off()需要(添加它給我一個錯誤)。

+0

Jenwen, 謝謝!這個解決方案也適用於我。看起來它會阻止R創建這些導致初始錯誤的臨時PDF。 – mikew

+0

你在哪裏放'pdf(NULL)'?在ui.R'的頂部,在繪圖函數的開始處,還是其他的東西? – landau

+0

另外,這是否會創建太多開放設備? – landau

2

一個jenwen答案是普通正確的,但: 請注意,您應該添加pdf(NULL)renderPlotly()腳本沒有開始。 此外,如果你開始致電renderPlotly()pdf(NULL)多次,它會創建一個「太多開放設備」的錯誤,這將導致服務器上包括png,tiff等所有圖形設備,而不僅僅是pdf。 要解決它 - 在pdf(NULL)之前,您可以撥打graphics.off()來清除當前打開的所有設備,並且每次只有一個。

3

像這樣的錯誤通常意味着您的目錄不屬於運行閃亮服務器的用戶。

我建議避免@ jenwen的答案,因爲它通過不嘗試寫入中間文件來避免根本問題,但通常會導致用戶使用量過大的Error in plot(NULL): too many open devices

更好的解決方案是符合shiny-server的約定:當將應用程序放入閃亮的服務器目錄時,例如/srv/shiny-server/app-name,我的權限更改爲已配置爲運行閃亮服務器的用戶:

sudo chown -R shiny:shiny /srv/shiny-server/app-name 

這樣,用戶就可以編寫和應用程序中刪除對臨時目錄沒有問題。