【问题标题】:Using sp (spatial package) from my own package results in error: could not find function从我自己的包中使用 sp(空间包)会导致错误:找不到函数
【发布时间】:2014-10-05 12:49:08
【问题描述】:

我正在开发我的第一个包 - 实际上我正在打包一些现有代码 - 在 RStudio 中。我已经用 roxygen2 标记了所有 cmets,这已经生成了一个正确的 NAMESPACE 文件,其中包括:

import(sp)
importFrom(geosphere,distMeeus)
importFrom(geosphere,distm)

我正在使用 geosphere 包中的 distm() 函数来计算距离矩阵,但它失败了:

.pointsToMatrix(x) 中的错误:找不到函数“is.projected” 4 .pointsToMatrix(x) 3 distm(OCC, SPAD, fun = distMeeus) 在 peta.R#79

现在is.projected() 在我已经导入的 sp 包中,所以它应该在我的搜索路径中。不应该吗?

作为一个实验,我刚刚在调用我的包代码之前调用了library(geosphere)(它也加载了 sp),并且我的函数已经过了那个点。 Soooo,我还需要为每个包裹拨打library()吗?这似乎有点多余,在这一点上,我想我会停下来看看是否有人可以在我进一步破坏任何东西之前让我直截了当......

【问题讨论】:

  • 您是否已将IMPORTS: sp 添加到您的DESCRIPTION 文件中?
  • 嗨@Andrie,DESCRIPTION文件确实有“进口:... sp,geosphere”
  • spImports 移动到Depends 有效。我一直在阅读Writing R Extensions,但我实际上无法弄清楚为什么会出现这种情况。我感觉这与加载包裹与附加包裹之间的区别有关,但一分钱对我来说还没有下降。
  • 尝试以下操作:将 methods 添加到您的 Imports,即 Imports: methods 以及您的 NAMESPACE,即 import(methods)。我知道这听起来很随意,但如果可行,我会尽力解释原因。
  • 这工作@Andrie!

标签: r sp geosphere


【解决方案1】:

已编辑

我不明白为什么会这样,但您需要将 methods 添加到您的包导入中:

  • 添加到您的DESCRIPTION

    Imports: methods
    
  • 添加到您的命名空间:

    import(methods)
    

【讨论】:

  • 我下载了 geosphere 的源代码包并四处寻找。该包中没有定义is.projected(),尽管该函数被调用了六次。查看DESCRIPTION 我发现:Depends: sp, R (>= 2.10.0) Suggests: methods, raster 该软件包的NAMESPACE 包含:importFrom("sp", SpatialPolygons, SpatialLines)
  • @MichaelHenry 感谢您的检查。让我删除这部分答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-29
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多