如何直接加载本地R包?含Fork包免安装加载及报错问题
加载本地R包的解决方案
针对你提出的两个问题,我分场景给你梳理清楚:
一、加载本地已安装好的R包
如果你的R包已经完成安装,只是不在R的默认搜索路径里,有两种实用方式:
- 直接在
library()里指定包所在的库目录(注意:是存放包的父目录,不是包自己的子目录):library("mypkg", lib.loc = "/path/to/your/library/folder") - 要是想长期把这个目录加入R的搜索路径(类似Python的
site.addsitedir),可以修改.libPaths():# 把自定义目录加到搜索路径最前面 .libPaths(c("/path/to/your/library/folder", .libPaths())) # 之后直接加载就行 library("mypkg")
二、加载本地未安装的Fork源码包(不用install.packages)
你想用devtools::load_all()是完全正确的思路,但你遇到的报错大概率是两个小问题:
- 路径拼写错误:看你写的命令里路径是
/home/ncw135/Documents/mypgk,但你说实际路径是~/mypkg——末尾多了个k少了个a?先仔细核对路径是否完全一致。 - 包结构不完整:R源码包必须有标准结构,比如根目录下要有
DESCRIPTION、NAMESPACE文件,还有R/文件夹放代码,缺了这些load_all没法正常工作。
正确操作步骤:
- 先确保
devtools已安装(没装的话先跑install.packages("devtools")),然后执行:devtools::load_all("/home/ncw135/Documents/mypkg") - 嫌写路径麻烦的话,先切换工作目录到包的根目录,再直接调用
load_all():setwd("/home/ncw135/Documents/mypkg") devtools::load_all() - 如果只是临时加载包里的个别脚本,也可以用
source()批量加载,但这种方式不会处理包的依赖和命名空间,只适合简单场景:lapply(list.files("~/mypkg/R", full.names = TRUE), source)
关于你遇到的报错原因
你看到的cannot open file ... mypkg.rdb错误,是因为library()是用来加载已安装的包的,它默认去系统或用户的默认库目录找编译好的包文件,但你给的lib.loc是源码目录,自然找不到.rdb这种编译后的文件。而devtools::load_all()是专门为源码包设计的,它会直接解析源码并加载,不用先安装,所以只要路径和包结构没问题,就能解决这个错误。
内容的提问来源于stack exchange,提问作者CiaranWelsh
相关产品推荐
相关产品推荐

