我正在整理一个我已经工作了近一年的包。我有一个音节查找函数所需的哈希表。哈希表实际上只是一个环境(我想我不是计算机高手),它是一个查找表。您可以在下面看到我创建它的函数。我有一个数据集DICTIONARY
(约 20,000 个字)将在加载包时加载。我也这个什么DICTIONARY
加载包时传递给哈希函数以创建新环境;就像是env <- hash(DICTIONARY)
因为这就是我现在加载环境的方式。如何在加载包时使函数在启动时运行,以便为使用我的包的用户创建这个新环境?
hash <- function(x, type = "character") {
e <- new.env(hash = TRUE, size = nrow(x), parent = emptyenv())
char <- function(col) assign(col[1], as.character(col[2]), envir = e)
num <- function(col) assign(col[1], as.numeric(col[2]), envir = e)
FUN <- if(type=="character") char else num
apply(x, 1, FUN)
return(e)
}
#currently how I load the environment with the DICTIONARY lookup table
env <- hash(DICTIONARY)
这是头DICTIONARY
如果有帮助:
word syllables
1 hm 1
2 hmm 1
3 hmmm 1
4 hmph 1
5 mmhmm 2
6 mmhm 2
7 mm 1
8 mmm 1
9 mmmm 1
10 pff 1
你们中的许多人可能会想“这由用户决定是否要加载环境”。观点正确,但该软件包的目标受众是扫盲领域的人员。该领域的 R 用户并不多,因此我必须让这个东西尽可能易于使用。只是想弄清楚我为什么要这样做的哲学,这样它就不会成为争论的焦点。
先感谢您。 (PS我看过这本手册(LINK http://cran.r-project.org/doc/manuals/R-exts.html#Package-structure)但似乎找不到有关此主题的任何信息)
编辑:
根据安德烈的建议,我认为会是这样的?但我不确定。此加载是否会在包中的所有其他函数和数据集加载之后加载?这个东西让我有点困惑。
.onLoad <- function(){
env <- hash(DICTIONARY)
}