2017-09-18 129 views
0

我正在开发的R包凡这是在DESCRIPTIONS文件如何加载R包中的依赖关系?

Imports: 
    dplyr, 
    ggplot2, 
    ncdf4 

可我有,我用第三依赖

testFun <- function(file, lat, long){ 
    ncfname <- file.path(file,fsep = .Platform$file.sep) 
    xfile <- nc_open(ncfname) #Opens the NetCDF file 
    lat <- ncvar_get(xfile, 'lat') #Extracts all latitudes 

    ...Calculations 

    return(XYZ) 
} 

当我Build and Reload包为例功能,和我运行该功能,它could not find function "nc_open"

,但它的工作原理,当我和ncdf4::nc_open

更换我应该前缀packagename::到每个依赖我在代码中使用?或者我错过了什么?

通常,我希望从DESCRIPTIONS安装所有依赖关系,并且它的函数可供使用,而不需要每次都需要包前缀。

回答

0

最简单的方法和最正确的方法是直接从包中取出你的函数,而不用打开任何可能会抹杀某人当前环境的包。

试试这个:

xfile <- ncdf4::nc_open(ncfname) 

应该获得你所需要的没有冲突。这是当前首选的方法,因为它会为用户找到它们。这也让人们很容易知道他们应该去探索的事情。

+0

是的......这是正确的方式 – sconfluentus

+0

如果可能,我想这是一个参考。它是否可用于任何文档?看起来很麻烦,虽然比较安全。 – maximusdooku

+0

转到Hadley WIckam的网站http://r-pkgs.had.co.nz/namespace.html它明确指出,除非你使用大部分的包(就像许多数据库包的功能OVER DBI一样):::是首选。 – sconfluentus

1

或者:

  • 明确前缀它的包装功能:ncdf4::nc_open(...)

或者:

  • 在空间文件importFrom(ncdf4, nc_open)添加一行,然后在你的代码,请在没有包装的情况下调用该功能:nc_open(...)

您可以使用import(ncdf4)来打包该包中的所有内容,而不是为要导入的每个函数添加一个importFrom行。

+0

我认为明确的前缀甚至可以帮助代码清晰。所以我会保持简单并坚持下去。我不想保留另一个进口清单。 – maximusdooku

+0

对于每个函数,您不需要'importFrom()',每个包只需要一个'importFrom(ncdf4,nc_open,nc_close,nc_foo,nc_bar)'。 –

+0

啊,谢谢!这听起来很有用...... – maximusdooku