包依赖性

时间:2015-05-20 20:12:52

标签: r r-package

我有一个R包,它取决于base64enc库。当我使用Rscript:

在包中运行源文件时
Rscript analyzer.R

它运行得很好。

analyzer.R的第一行是:

library(base64enc);

但是,当我从repl中的包中运行一个函数时:

library(analyzer)
analyze()

它抱怨没有安装base64enc。

Error in rawToChar(base64decode(mark[1])) :
  could not find function "base64decode"
Calls: analyze ... collect.marks -> lapply -> FUN -> lapply -> FUN -> rawToChar

但是,在REPL中我手动包含base64enc:

library(base64enc)
library(analyzer)
analyze()

工作正常。无论如何,我可以告诉我的分析器包使用base64enc库,而不必在每次使用库时都将它包含在每个脚本中吗?

1 个答案:

答案 0 :(得分:4)

(请注意,脚本不是包。)

当您运行脚本analyzer.R时,它会显式加载base64enc,因此包位于您的加载路径中。

但您的软件包可能只有Imports: base64enc并带有相应的NAMESPACE语句,这使得您的软件包中的base64enc代码可用,但不加载

在我们过去做Depends: base64enc的那天, 也会加载它 - 但是会使搜索路径变得混乱。 Imports:更好,但你在这里观察到非常副作用。所以只需在REPL上加载另一个包。