我正在尝试使用shiny创建一个web应用程序。它要求我加载我在计算机上安装的包。例如:
## Contents ui.R:
library(shiny)
library(plyr)
shinyUI(pageWithSidebar(
headerPanel("Hello Shiny!"),
sidebarPanel(
sliderInput("obs",
"Number of observations:",
min = 0,
max = 1000,
value = 500)
),
mainPanel(
plotOutput("distPlot")
)
))
## Contents server.R:
library(shiny)
library(plyr)
shinyServer(function(input, output) {
output$distPlot <- renderPlot({
# generate an rnorm distribution and plot it
dist <- rnorm(input$obs)
hist(dist)
})
})如果我在本地运行它(使用runApp),它工作得很好,但是当我尝试通过我的服务器(同一台计算机)运行它时,我得到错误消息,plyr包(或我试图以这种方式使用的任何其他包)没有安装。如何在shiny服务器中使用额外的包?
发布于 2013-04-18 00:56:33
比较两种情况下.libPaths()的输出,并在服务器实例/脚本中进行相应的调整。
例如,您可能在“您的”R包目录中有服务器无法访问的包。在这样的情况下,系统范围内的软件包安装更可取--并且是Debian / Ubuntu上的默认安装。
发布于 2015-10-07 23:43:26
问题是shiny-server无法找到您安装的包,因为它以另一个名为shiny的用户身份运行这些包。此用户是在安装shiny-server时创建的
解决此问题的最简单(也是最安全的IMHO)方法是以闪亮的用户身份安装包,使用以下步骤。
为使用password
su - shiny
sudo passwd shiny R up $ R (没有sudo)
install.packages("plyr")请注意,如果您在同一台计算机上安装了rstudio-server,则可以使用该界面执行步骤2-4。只需使用相同的域/ip并使用:8787作为rstudio-server接口,而不是:3838作为shiny-server接口。
改编自我的答案here。
发布于 2017-12-06 00:33:11
这里可能有一个不会弄乱系统库的解决方案。将以下代码放在server.R的开头。
user <- unname(Sys.info()["user"])
if (user == "shiny") {
# Set library locations
.libPaths(c(
"/path/to/your/own/library"
)
)
}这让Shiny可以优先查找安装在你自己的库中的包,还可以让你用来开发应用程序的包和应用程序部署时使用的包保持同步。
请注意,您可能需要调整库文件夹的权限,以便shiny用户能够正确查看它。否则,它将无法查看您指定的位置,而不会出现任何错误消息。
https://stackoverflow.com/questions/16065805
复制相似问题