gpt4 book ai didi

r - 在包中包含一个 "Hash Table"

转载 作者:行者123 更新时间:2023-12-01 08:18:39 25 4
gpt4 key购买 nike

我正在整理一个我已经工作了将近一年的包。我有一个我称之为哈希表的东西,它是一个音节查找功能所需要的。哈希表实际上只是一个查找表的环境(我想我不是计算机高手)。您可以在下面看到我创建它的功能。我有一个数据集 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)
}

最佳答案

如果散列不经常更改(根据您的问题描述,这似乎是这种情况),则将散列保存到您的包源树中

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

安装包后,env 将在 namespace 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"
}

关于r - 在包中包含一个 "Hash Table",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10507377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com