当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R globalVariables 检查包时使用的声明


R语言 globalVariables 位于 utils 包(package)。

说明

对于 globalVariables ,提供的名称是当 check 工具应用于此包时应被视为全局定义的函数或其他对象。对 globalVariables 的调用将包含在包的源代码中。同一包中的重复调用会累积全局变量的名称。

典型的例子是引用类中的字段和方法,它们对于 codetools 来说似乎是全局对象。 (这种情况由 setRefClass() 和朋友使用提供的字段和方法名称自动处理。)

对于 suppressForeignCheck ,提供的名称是在外部函数调用中用作 .NAME 的变量,不应由 checkFF(registration = TRUE) 检查。如果没有此声明,则假定简单字符串以外的表达式计算为已注册的本机符号对象。将检查调用类型( .Call.External 等)和参数计数。通过此声明,通常会抑制对这些名称的检查。 (如果代码使用仅应在运行时计算的表达式,则可以通过将其包装在 dontCheck 函数调用中或将其保存到局部变量并抑制有关该变量的消息来抑制消息。请参阅示例以下。)

用法

globalVariables(names, package, add = TRUE)
suppressForeignCheck(names, package, add = TRUE)

参数

names

对象名称的字符向量。如果省略,则将返回包中声明的当前全局变量列表,不变。

package

相关包,通常是包的字符串名称,也可以是对应的命名空间环境。

当对 globalVariablessuppressForeignCheck 的调用出现在包的源文件中时,通常会省略该参数,如下例所示。

add

names的内容应该添加到当前的全局变量中还是替换它?

细节

声明的全局变量和本机符号对象的列表存储在包命名空间中的元数据对象中,假设 globalVariablessuppressForeignCheck 调用作为包源代码中的顶级调用发生。

检查命令,在包中实现tools,在检查之前查询列表R包中的源代码以解决可能出现的问题。

globalVariables被介绍于R2.15.1 和suppressForeignCheck被介绍于R3.1.0 因此两者都应该有条件地使用:参见示例。

globalVariables 返回声明的全局变量的当前列表,可能被此调用修改。

suppressForeignCheck 返回不检查的本机符号对象的当前列表。

注意

全局变量列表实际上属于受限制的范围(例如,一个函数或一组方法定义),而不是整个包。但是,实现更精细的控制需要在 check 和/或 codetools 中进行更改,因此在此版本中,信息存储在包级别。

例子

## Not run: 
## assume your package has some code that assigns ".obj1" and ".obj2"
## but not in a way that codetools can find.
## In the same source file (to remind you that you did it) add:
if(getRversion() >= "2.15.1")  utils::globalVariables(c(".obj1", "obj2"))

## To suppress messages about a run-time calculated native symbol, 
## save it to a local variable.

## At top level, put this:
if(getRversion() >= "3.1.0") utils::suppressForeignCheck("localvariable")

## Within your function, do the call like this:
localvariable <- if (condition) entry1 else entry2
.Call(localvariable, 1, 2, 3)

## HOWEVER, it is much better practice to write code
## that can be checked thoroughly, e.g.
if(condition) .Call(entry1, 1, 2, 3) else .Call(entry2, 1, 2, 3)

## End(Not run)

作者

John Chambers and Duncan Murdoch

也可以看看

dontCheck

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Declarations Used in Checking a Package。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。