如何加载硬盘上本地存在的R包?

如何加载硬盘上本地存在的R包?,r,package,R,Package,如果我有一个从本地位置~/mypkg的另一个repo派生的R包,是否可以直接从此位置加载,而无需使用install.packages。我正在寻找的功能类似于Python中的site.addsitedir 我尝试了以下几种变体: library('mypkg', lib.loc = "/home/ncw135/Documents/mypkg") 及 失败原因如下: Loading mypkg Error in get(method, envir = home) : cannot open

如果我有一个从本地位置~/mypkg的另一个repo派生的R包,是否可以直接从此位置加载,而无需使用install.packages。我正在寻找的功能类似于Python中的site.addsitedir

我尝试了以下几种变体:

library('mypkg', lib.loc = "/home/ncw135/Documents/mypkg")

失败原因如下:

Loading mypkg
Error in get(method, envir = home) : 
  cannot open file '/home/ncw135/R/x86_64-pc-linux-gnu-library/3.6/mypkg/R/mypkg.rdb': No such file or directory
In addition: Warning messages:
1: In .registerS3method(fin[i, 1], fin[i, 2], fin[i, 3], fin[i, 4],  :
  restarting interrupted promise evaluation
2: In get(method, envir = home) :
  restarting interrupted promise evaluation
在尝试使用它们的一个函数之后

发表评论
我要更改的repo是

否,不安装程序包,您无法加载它。如果不希望永久安装,可以设置一个临时库,在那里安装,然后按如下方式从那里加载:

templib <- tempfile()
dir.create(templib)
.libPaths(templib)
install.packages("~/mypkg", lib = templib, type = "source", repos = NULL)

之后,librarymypkg将使用~/mypkg/DESCRIPTION中给出的任何包名加载临时安装的包。当您关闭会话并自动删除templib时,它将与在此之后安装到同一库中的任何其他软件包一起被删除。如果您的会话崩溃,templib可能不会被删除,但它不会在将来的会话中重新使用。

1您从GitHub上获得的回购协议是否公开?使用devtools::load_all访问它可以帮助其他人看到他们的机器上发生了什么。我很惊讶devtools::load_all没有为你做这件事。我从未使用过它,但我认为这就是函数的目的。3出于好奇,安装软件包有什么不好的地方吗?devtools::load_all对我来说也不管用。这似乎是一个非常糟糕的主意:既然安装如此简单,为什么要尝试模拟安装而不实际进行呢?@user2554330确切地说,我想知道为什么不直接安装?我只是刚开始在R中开发。是的,这是一个公开可用的存储库,请参阅编辑。我的想法是,在进行更改后重复安装和卸载似乎是一种效率低下的方法,我想知道是否有更好的方法。在Python中,我们只需使用site.addsitedir将目录添加到PythonPath中。不,不安装程序包就无法加载它。这是误导;devtools::load\u all应该很好地模拟加载卸载的包。为了证明这一点,请尝试librarydevtools;创建_packageanRpackage,rstudio=FALSE,open=FALSE,然后在一个包/R/中,放置一个文件foo.R,其中包含不加载包的foo,它模拟加载它。对于某些软件包,它根本不起作用。即使在你的例子中,ls2也没有列出foo,就像我安装了这个包并运行libraryanRpackage一样:这个包最终排在第三位,而不是第二位,并且导出了一些我没有创建的垃圾函数。这确实有效,但是,如果每次我想在原始代码之外的项目中测试新代码时都必须安装和卸载它,那么我最好使用默认的包目录,对吗?我就是这么做的。如果您使用的是RStudio或其他有用的前端,那么安装也没什么大不了的。只要重新启动RStudio自动执行的R,就不需要卸载软件包,这样在安装过程中就不会加载软件包。
templib <- tempfile()
dir.create(templib)
.libPaths(templib)
install.packages("~/mypkg", lib = templib, type = "source", repos = NULL)