• R语言
  • 制作package的命名空间问题

在阅读Writing R Extensions过程中遇到一些问题,请教大家,具体是:

1. 在写NAMESPACE文件时,如果声明“引用”了某个包中的变量,比如:importFrom(foo, g),即从名为“foo”的包中引用函数g。那么,自己在写代码时,是不是就可以直接使用函数g,而不需要加入require(foo)之类的语句?

我自己调查了一些包,看到不需要使用require()函数再次载入;而且从逻辑上讲,如果使用了require(foo)函数,不就把foo的命名空间都载入了,这不就违背NAMESAPCE文件的设计意图了?但还是感觉拿不准,所以上来问问。

2. NAMESPACE文件中如果声明引用某个包全部变量,比如import(foo),这与require(foo)有什么区别?

3. 同时,又看到可以使用操作符"::"或者":::"引用命名空间的变量。那么,我的问题是,在代码时使用这种方法引用命名空间的变量,比如foo::g,是不是就不需要在NAMESPACE文件中声明了?

谢谢~~

1. 对

2. import()之后对用户不可见,require()之后所有导出的对象都可见

3. 若无特殊需要,尽量用命名空间,避免双冒号

回复 第2楼 的 谢益辉:非常感谢,搞清楚了。“双冒号”形式的引用我也做了尝试,如果不把引用的包放入import(),有时可能无法正确输出结果。比如用双冒号引用方法,可能无法输出S4的对象。