我已经开发了一个本地程序包,该程序包依赖于CRAN上的其他程序包(例如pool
)。因此,当我尝试使用标准安装软件包时
install.packages("/path/to/package",
repos = NULL,
type = "source")
我收到一个错误,因为未安装依赖项。 install.packages
有一个参数dependencies
,默认情况下它将尝试安装那些依赖项。但是,如手册页所述(并在下面的链接问题中进行了注释),repos = NULL
表示依赖项将被忽略。
要解决这个问题,我使用软件包miniCRAN
创建了一个包含我的软件包的仓库,希望我可以做一个repos = c("myRepo", getOption("repos"))
来使其正常工作。
现在我可以使用安装软件包了
install.packages("package",
repos = c("/path/to/repo", getOptions("repos"),
type = "source")
但仅当我已经安装pool
时。如果没有,我仍然会收到错误消息,因为它找不到依赖项。
所以我叫miniCRAN::addPackage("pool")
,它将软件包及其许多依赖项添加到我的仓库中,如果我调用miniCRAN::pkgAvail()
,它们都会出现。
但是,如果我再次尝试安装软件包,仍然会遇到there is no package called 'pool'
错误。
有趣的是,如果我尝试从仓库中安装pool
本身,就可以了。
install.packages("pool",
repos = "/path/to/repo",
type = "source")
install.packages("package",
repos = "/path/to/repo",
type = "source")
但是,显然,这种做法超出了在仓库中添加pool
的地步:我可能也已经从CRAN安装了它。
那么这是怎么回事,这真的是安装本地软件包 及其CRAN依赖项的唯一方法吗?