2016-04-21 103 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 

这样,用户就可以编写和应用程序中删除对临时目录没有问题。