當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。