包括一个“哈希表”在一个包(Including a “Hash Table” in a packag

2019-09-17 03:11发布

我在放在一起包现在我已经工作了将近一年的过程。 我有我所说的哈希表,一个音节查找功能需要。 哈希表实际上只是一个环境(我觉得我不是电脑高手),这是一个查找表。 你可以看到I的功能与下面创建它。 我有一个数据组DICTIONARY (约20,000个字)被装载在封装时将加载。 我还什么这个DICTIONARY传递给哈希函数来创建一个新的环境时,包装; 像env <- hash(DICTIONARY)作为htis现在我怎么加载环境。 我如何在启动时,包被加载,这样使用我的包的创建这个新的环境功能运行?

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 ),但似乎无法找到关于此主题的任何信息)

编辑:每安德烈的建议,我认为它会是这样的? 但我不知道。 是否在包负载中的所有其他功能和数据集后,该负荷? 这东西是有点混乱给我。

.onLoad <- function(){
   env <- hash(DICTIONARY)
}

Answer 1:

如果散列是要经常改变(这似乎等的情况下,从您的问题描述),然后保存散列到您的软件包源树

save(env, file="<my_pkg>/R/sysdata.rda")

安装包后, env将可在名称空间内, my_pkg:::env 。 请参阅“编写R附加”的1.1.3节。 你可能有一个剧本,说在“/inst/scripts/make_env.R”创建env ,以及您为这些罕见的情况下开发者使用时env需要更新。

另一种可能性是哈希值发生变化,但仅限于包安装 。 然后将溶液是编写在软件包安装评估代码。 因此,在一个文件/R/env.R写沿东西线

env <- local({
    localenv <- new.env(parent=emptyenv())
    ## fill up localenv, then return it
    localenv[["foo"]] = "bar"
    localenv
})

所解决的可能性.onLoad是数据的每个包被加载,例如,时间变化,因为它是从一些在线源检索的更新。

env <- new.env(parent=emptyenv())

.onLoad <- function(libname, pkgname)
{
    ## fill up env
    env[["foo"]] = "bar"
}


文章来源: Including a “Hash Table” in a package
标签: r package