tmPlot在命名空间中,但找不到它的依赖项

seb*_*n-c 6 namespaces r treemap

我有一个使用tmPlot函数from 的包treemap,但是当我尝试使用该函数时,它会抛出一个错误,它没有加载其中一个依赖项:

Error in tmPlot(data, index = index, vSize = vSize) : 
  could not find function "brewer.pal"
Run Code Online (Sandbox Code Playgroud)

依赖项已安装在命名空间中.

这个问题有一些设置,是一个包问题,但我试图尽可能减少它:

确保已安装treemap(及其所有依赖项).

我做了一个名为'anRpackage'的目录.里面是一个文件夹('R')和一个带有以下文字的DESCRIPTION文件:

Package: anRpackage
Title: What the package does (short line)
Version: 1.0
Author: Who wrote it
Maintainer: Who to complain to <yourfault@somewhere.net>
Description: More about what it does (maybe more than one line)
License: What license is it under?
Imports:
    treemap
Collate:
    'maketree.R'
Run Code Online (Sandbox Code Playgroud)

R /文件夹里面是一个名为'maketree.R'的R文件.其内容是:

#' maketree
#' 
#' @importFrom treemap tmPlot
#' @export maketree

maketree <-
function(data, index, vSize){
  tmPlot(data, index=index, vSize=vSize)
}
Run Code Online (Sandbox Code Playgroud)

假设您位于'anRpackage'上方的目录中,请运行以下脚本:

library(roxygen2)
roxygenise("anRpackage/")

library(devtools)

build("anRpackage")
install("anRpackage")
Run Code Online (Sandbox Code Playgroud)

重新启动R(最好使用--vanilla)并运行以下命令:

library(anRpackage)

data(mtcars)
maketree(mtcars, "cyl", "mpg")
Run Code Online (Sandbox Code Playgroud)

你应该在开始时得到我描述的错误.为什么会这样?RColorBrewer被列为取决于treemap,所以应该自动导入,不是吗?

Mar*_*gan 10

问题实际上是树形图.treemap使用brewer.pal,所以应该Imports: RColorBrewer和importFrom(RColorBrewer, brewer.pal).

就目前而言,如果用户说,一切library(treemap)都没问题,树图和RColorBrewer被附加到search()路径上,并且在搜索路径上找到了tmPlot评估brewer.pal时间.当然,如果用户说brewer.pal="yeast"或什么的话,包会破坏,因为会找到错误的符号; 这是名称空间的原因之一,用于保护树形图的功能不受用户可能执行的操作.

但是当你(正确地)进口时会发生什么:树形图?treemap被加载(到内存中)但是树形图及其依赖项都没有附加(到搜索路径).所以brewer.pal没找到.

如果树图是Imports:RColorBrewer,那么当树图通过调用附加到搜索路径library(treemap)时,以及仅导入到包中时,都会找到brewer.pal .

联系treemap的维护者,让他们更仔细地构建他们的名字空间.

  • 非常好解释.我需要与这个请求联系几个软件包维护人员,并想知道是否有一个规范文档指向他们 - 在R文档,CRAN网站或R-devel列表服务中特别好的东西.现在我可以改用你的答案.谢谢. (2认同)