Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在编写自己的R包时,我可以';似乎无法正确导入其他软件包_R_Import_Namespaces_Roxygen - Fatal编程技术网

在编写自己的R包时,我可以';似乎无法正确导入其他软件包

在编写自己的R包时,我可以';似乎无法正确导入其他软件包,r,import,namespaces,roxygen,R,Import,Namespaces,Roxygen,好吧,第一次尝试写一个R包,我就卡住了。以下是我创建包的方式: package.skeleton("pkg",code_files=some.filenames) roxygenize("okg") 我正在使用roxygen2,在我的“pkg package.R”文件中有以下导入: 然后从终端运行: R CMD build pkg R CMD check pkg R CMD install pkg 在检查阶段,我收到以下警告: **正在准备用于延迟加载的包 警告:加载“lubridate”时

好吧,第一次尝试写一个R包,我就卡住了。以下是我创建包的方式:

package.skeleton("pkg",code_files=some.filenames)
roxygenize("okg")
我正在使用roxygen2,在我的“pkg package.R”文件中有以下导入:

然后从终端运行:

R CMD build pkg
R CMD check pkg
R CMD install pkg
在检查阶段,我收到以下警告:

**正在准备用于延迟加载的包
警告:加载“lubridate”时替换以前的导入“hour”
警告:加载“lubridate”时替换以前的导入“mday”
警告:加载“lubridate”时替换上一次导入的“月份”
警告:加载“lubridate”时替换以前的导入“wday”
警告:在加载“lubridate”时替换以前的导入“week”
警告:加载“lubridate”时替换以前的导入“yday”
警告:在加载“lubridate”时替换以前的导入“year”
**帮助
*安装帮助索引
**构建包索引…
**测试是否可以加载已安装的软件包
警告消息:
1:在加载“lubridate”时替换以前的导入“hour”
2:加载“lubridate”时替换以前的导入“mday”
3:在加载“lubridate”时替换以前的导入“月份”
4:加载“lubridate”时替换以前的导入“wday”
5:在加载“lubridate”时替换以前的导入“week”
6:加载“lubridate”时替换以前的导入“yday”
7:加载“lubridate”时替换以前的进口“年份”

我真的不知道该怎么做,但它们看起来像是覆盖命名空间中内容的典型警告。在任何情况下,我都可以安装该软件包,但当我尝试使用它时会发生以下情况:

图书馆(打包)
重写POSIXt、Date和difftime的+和-方法
警告消息:
1:在加载“lubridate”时替换以前的导入“hour”
2:加载“lubridate”时替换以前的导入“mday”
3:在加载“lubridate”时替换以前的导入“月份”
4:加载“lubridate”时替换以前的导入“wday”
5:在加载“lubridate”时替换以前的导入“week”
6:加载“lubridate”时替换以前的导入“yday”
7:加载“lubridate”时替换以前的导入“year”

d警告是因为data.table和lubridate都定义了一个符号
hour
,等等;请参见
data.table::hour
lubridate::hour
。可以通过只从lubridate/data.table导入所需的函数而不是整个包来避免这种情况;标准名称空间文件将包含

importFrom(lubridate, hour)
比如说。在roxygen2中,您将使用以下标记:

@importFrom lubridate hour

匹配问题可能是因为
merge
调度错误,可能是因为zoo的名称空间中应该有
S3method(merge,zoo)
,而不是
export(merge.zoo)
,如编写R扩展1.6.2所述。这里的解决方案是联系
zoo
packageDescription('zoo')$mainter的维护人员(该维护人员对R非常精通,我觉得自己好像被误诊了……。

作为匹配错误的临时解决方法,我已经成功地将
zoo
包列在包的
DESCRIPTION
文件的
dependens:
部分下。

我建议将这些包放在
DESCRIPTION
中的
dependens
中。这是一个有用的答案,但只是一个跟进。所以,如果我只导入一个函数,比如“hour”,我是否也需要导入它的所有内部函数或潜在的私有函数?或者,
importFrom
know导入任何私有函数或内部依赖项吗?@krishnab函数首先在自己的环境中查找它们使用的符号,然后在定义函数的环境中查找,因此,data.table::hour使用的data.table函数将自动找到。当您需要对多个包使用导入来访问特定的对象类,并且这些包存在名称冲突时,会发生什么情况?我正在使用spatstat和光栅(区域、旋转、移位)来实现这一点。我不能使用importFrom,因为我正在使用这两个函数中的许多函数,并且需要包类。有没有办法屏蔽与spatstat冲突的三个光栅函数?我应该注意,仅在描述中使用depends不起作用。您也可以使用import,除了:
@importFrom lubridate hour