在 R 中作为开发人员存储和更新包数据的最佳方式?
Best way to store and update package data as a dev in R?
我正在开发一个包,需要在 R 会话过程中在后台存储和操作数据。首先,这将是一个关于用户到目前为止下载了什么的数据框,当他们下载更多时更新等等。这个数据将用于我的包中的许多功能,例如,看看他们是否需要下载任何东西别的。我预计在某些情况下,此数据框可能会变得相对较大(数千行)。
我知道为包存储全局变量的一种简单方法是使用 option()
函数将它们存储为选项。我还可以想象在每个会话开始时调用一个有状态函数,它将作为此数据的网关。
但我总的感觉是选项的大小通常非常小,而且有状态函数看起来可能会让人感到困惑,需要一些工作才能顺利运行。 有没有更好的方法来存储这样的信息?如果有帮助,我不希望用户能够直接操作包数据。
您应该将数据帧存储在包的 /data
文件夹中。
如 here 所述,每个数据集应存储在一个 .RData
文件中,该文件仅包含一个对象,具有相同的名称,并由 save
命令创建。
作为导出函数,应该记录数据对象。一种可能性是在 /R
文件夹中创建一个 Roxygen .R 脚本,使用 @format
标签来描述数据集的内容,并通过 "DataSetName"
结束这个脚本
#' My data set
#'
#' some useful data
#'
#' @format a dataframe with 464 rows and 2 variables
#' * bar : bar name
#' * foo : foo value
#'
#' @source created by me
"DataSetName"
[编辑]如果要在当前会话中存储包的数据,可以在包的 .R 脚本之一中为包创建隐藏环境:
.pkg.env <- new.env()
#' Set hidden variable
#'
#' @param var
#'
#'
pkg.set <- function(var) {
varname <- deparse(substitute(var))
if (exists(varname,env=parent.frame())) {
assign(deparse(substitute(var)),var,env=.pkg.env)}
else {
stop(paste(varname,"doesn't exist"))
}
}
#' get hidden variable
#'
#' @param var
#'
#'
pkg.get <- function(var) {
varname <- deparse(substitute(var))
.pkg.env[[varname]]
}
这两个函数都没有导出,所以用户看不到它们。
不过,您可以在包的功能之间使用它们:
TempData <- data.frame(test="Test")
pkg.set(TempData)
pkg.get(TempData)
test
1 Test
我正在开发一个包,需要在 R 会话过程中在后台存储和操作数据。首先,这将是一个关于用户到目前为止下载了什么的数据框,当他们下载更多时更新等等。这个数据将用于我的包中的许多功能,例如,看看他们是否需要下载任何东西别的。我预计在某些情况下,此数据框可能会变得相对较大(数千行)。
我知道为包存储全局变量的一种简单方法是使用 option()
函数将它们存储为选项。我还可以想象在每个会话开始时调用一个有状态函数,它将作为此数据的网关。
但我总的感觉是选项的大小通常非常小,而且有状态函数看起来可能会让人感到困惑,需要一些工作才能顺利运行。 有没有更好的方法来存储这样的信息?如果有帮助,我不希望用户能够直接操作包数据。
您应该将数据帧存储在包的 /data
文件夹中。
如 here 所述,每个数据集应存储在一个 .RData
文件中,该文件仅包含一个对象,具有相同的名称,并由 save
命令创建。
作为导出函数,应该记录数据对象。一种可能性是在 /R
文件夹中创建一个 Roxygen .R 脚本,使用 @format
标签来描述数据集的内容,并通过 "DataSetName"
#' My data set
#'
#' some useful data
#'
#' @format a dataframe with 464 rows and 2 variables
#' * bar : bar name
#' * foo : foo value
#'
#' @source created by me
"DataSetName"
[编辑]如果要在当前会话中存储包的数据,可以在包的 .R 脚本之一中为包创建隐藏环境:
.pkg.env <- new.env()
#' Set hidden variable
#'
#' @param var
#'
#'
pkg.set <- function(var) {
varname <- deparse(substitute(var))
if (exists(varname,env=parent.frame())) {
assign(deparse(substitute(var)),var,env=.pkg.env)}
else {
stop(paste(varname,"doesn't exist"))
}
}
#' get hidden variable
#'
#' @param var
#'
#'
pkg.get <- function(var) {
varname <- deparse(substitute(var))
.pkg.env[[varname]]
}
这两个函数都没有导出,所以用户看不到它们。 不过,您可以在包的功能之间使用它们:
TempData <- data.frame(test="Test")
pkg.set(TempData)
pkg.get(TempData)
test
1 Test