我正在尝试使用Imports:而不是Depends:在DESCRIPTION我的软件包的文件中,但我仍然觉得我还有更多要了解的内容;-)
我从这篇文章中学到的东西(顺便说一下:真棒!!!)就是说我的包装,比如通过环境中的生命而不是附加到搜索路径来mypkg导入(说imported.pkg).当试图找到那些船时,R在遍历搜索列表之前查看.到现在为止还挺好.Imports:imports:mypkgfooimported.pkgimports:mypkg
如果imported.pkg(导入mypkg)取决于某个其他包(在Depends:包的DESCRIPTION文件部分中说明),我是否需要使这个包非常Depends:依赖我的包,以便R找到该包的功能?所以在我看来,其他R抱怨.
似乎只是导入这样的包是不够的.例如,拿包roxygen2(CRAN).这取决于digest导入一堆其他包时.我(连同其导入digest的mypkg也需要它),并检查环境imports:mypkg这确实列出了digest函数:"digest" %in% parent.env(asNamespace("mypkg"))返回TRUE
然而,当roxygenize()从作为其中一部分的函数内部运行时mypkg,R抱怨它无法找到digest.
如果您有一个新的R会话(除了来自基础的软件包,没有附加任何软件包),并尝试创建按yearmon类排序的以下xts对象...
df <- data.frame(date = zoo::as.yearmon(seq.Date(as.Date("2015-01-01"),
as.Date("2015-12-31"),
by = "month")),
num = rnorm(12, 0, 1))
dates <- df[,1]
xts::xts(as.matrix(df[, -1]), order.by = dates)
Run Code Online (Sandbox Code Playgroud)
您得到以下错误。
我以为我了解R名称空间框架,但是在这种情况下我完全迷失了。当dates对象已经是yearmon对象时,为什么xts尝试调用as.yearmon函数?我知道xts取决于动物园,但这是原因吗?
如果连接了动物园,那么错误当然会消失。
我对此问题感兴趣的原因是,我正在创建一个使用xts包的包。我的函数之一返回一个xts对象,但是我希望我的包仅依赖R并导入所有其他包-据哈德利·威克姆(Hadley Wickham)所述,这是最佳实践(据我所知)。但是,由于这个问题,我需要依赖Zoo软件包才能完成这项工作。
我确定我会忽略某些事情,所以我希望SO的一个友好的人能够帮助解释这个问题并提出解决方案。谢谢!
我用来neuralnet训练神经网络。该包,更具体地说是 的绘图功能neuralnet,依赖于grid,它是去年以来的基础包。但是,除非我grid手动加载,否则绘图会失败:
AND <- c(rep(0,7),1)
OR <- c(0,rep(1,7))
binary.data <- data.frame(expand.grid(c(0,1), c(0,1), c(0,1)), AND, OR)
net <- neuralnet::neuralnet(AND + OR ~ Var1 + Var2 + Var3, binary.data,
hidden = 0, linear.output=FALSE)
if(requireNamespace("grid")) {
neuralnet::plot.nn(net)
}
> Error in plot.nn(net, rep = i, x.entry, x.out, radius, arrow.length, intercept, :
> could not find function "grid.newpage"
Run Code Online (Sandbox Code Playgroud)
使用library(grid)帮助,但我想避免这种情况,因为我想稍后在我自己的包中使用它。R 包建议使用requireNamespace,但这也没有帮助,正如我们在上面看到的。
grid::在对函数的所有调用前面添加grid并从源代码构建包解决了这个问题,但我想知道:这是预期的行为吗?查看 的来源neuralnet,我发现没有提及requireNamespace或library …
我坚持定义S3方法autoplot.
我有以下(完整代码在这里):
#' Autoplot for bigobenchmark object
#'
#' @importFrom ggplot2 autoplot
#'
#' @param object
#'
#' @return A ggplot2 plot
#' @export
#'
#' @examples
#' # Create plot for benchmarks
#' library(ggplot2)
#' bench <- bigobenchmark(1:n, for(i in 1:n) for(i in 1:n) 1:n, args=seq(from=1, to=100, length.out = 50))
#' autoplot(bench)
autoplot.bigobenchmark <- function(object) {
plt <- ggplot2::ggplot(data = object$benchmarks, ggplot2::aes(x=arg, y=mean, colour=expr))
plt <- plt + ggplot2::geom_line()
plt <- plt + ggplot2::geom_pointrange(aes(ymin=min, ymax=max)) …Run Code Online (Sandbox Code Playgroud) 我一直在网上搜索,但找不到快速的答案.我在哪里放置我的包需要的库,以便在加载我的包时也加载它们?
据我了解,文件中的imports参数DESCRIPTION只会在系统当前不存在的情况下安装这些软件包.但是library(ggplot2)在一个包中写入的解决方案是什么,或者我应该为每个脚本分别编写它?
当我在一个新的R会话中写入devtools::load_all()并加载我的包时,我的包依次加载的库都没有被加载.
当我在 RI 中使用一个包时,安装它并在加载它时使用它。现在如果我添加一个使用另一个包的包怎么办?这个包也是自动下载和加载的吗?还是一般禁止 R 包使用另一个包?我不这么认为。
假设我想发布一个 R 包。在我的代码中,我可以使用其他包中的函数并安装和加载这些包吗?或者当我需要来自其他包的函数时这是如何工作的?我是否必须实现一条消息,表明需要这个和那个包,并且用户必须在它之前安装和加载它,并且我需要实现错误捕获功能,以防在 PC 系统上找不到包?
当我想发布一个 R 包时,我可以在我的包/代码中使用/调用 Java 代码吗?
对于已经发布的包——所以让我们以 fGarch 包为例——我想看看完整的代码。我怎么能看到这个?我知道 R 是开源的,我认为或多或少可能只输入一个空函数并显示代码,但有时这不起作用,尤其是我的问题是:有没有办法可以查看整个包的代码?
对于已经发布的包,是否可以查看和查看所有提交的文件?因此,就像提交所有文件的 git 存储库一样 - 代码本身以及需要的其他文件(如描述文件或其他文件) - 我可以看到这些文件并查看它们吗?
此外,关于此处的这篇文章和隐藏功能:在 R 包中是否有我无法作为最终用户看到的代码?这也是指我之前的问题,我如何或通过哪种方式可以看到 R 包中的整个代码?