lar*_*ite 5 compression lazy-loading r rdata r-package
问:哪些因素决定了lazyload DBR 包安装步骤的 walltime?
我正在开发一个 R 包,以便用户轻松访问联盟数据。目录大小data为4.5G,其中所有对象均采用bzip2. 有 202 个单独的 .RData 文件,压缩后大小从 133B 到 24MB 不等。
当我安装该包时,输出如下所示:
\nDownloading GitHub repo mypackage@HEAD\n\xe2\x9c\x93 checking for file \xe2\x80\x98.../mypackage-1c6478a/DESCRIPTION\xe2\x80\x99 ...\n\xe2\x94\x80 preparing \xe2\x80\x98mypackage\xe2\x80\x99:\n\xe2\x9c\x93 checking DESCRIPTION meta-information\n\xe2\x94\x80 checking for LF line-endings in source and make files and shell scripts\n\xe2\x94\x80 checking for empty or unneeded directories\n\xe2\x94\x80 building \xe2\x80\x98mypackage_1.0.0.tar.gz\xe2\x80\x99 (1.3s)\n \n* installing *source* package \xe2\x80\x98mypackage\xe2\x80\x99 ...\n** using staged installation\n** R\n** data\n*** moving datasets to lazyload DB\n** inst\n** byte-compile and prepare package for lazy loading\n** help\n*** installing help indices\n** building package indices\n** testing if installed package can be loaded from temporary location\n** testing if installed package can be loaded from final location\n** testing if installed package keeps a record of temporary installation path\n* DONE (mypackage)\nRun Code Online (Sandbox Code Playgroud)\n该*** moving datasets to lazyload DB步骤耗时最长,大约 5 分钟。是什么决定了这一步的walltime?物体数量?物体的大小?文件压缩?我能做些什么来让它安装得更快吗?
编辑:我确实希望所有 R 对象都是延迟加载的,并且我希望它们都有随附的文档,所以我相信最佳实践是将 .rda 文件保留在 .rda 文件中data/。我特别想知道是否有一种方法可以在安装软件包时加快延迟加载步骤。
我想您正在将数据添加到/data文件夹中。另一种选择是将其放在inst/;下。例如inst/extdata/,通过使用给定的路径,可以通过包中的函数加载system.file("extdata/mydataset.Rds", package="foo"). 然后您需要调用该辅助函数来获取数据。
即对于特定数据集来说是这样的:
loadPackageData <- function() {
readRDS(system.file("extdata/foo.Rds", package="bar"))
}
Run Code Online (Sandbox Code Playgroud)
编辑:要加载多个数据集,您可以执行以下操作:
bar_data_files <- list.files(system.file("extdata", package = "bar"),
pattern = "\\.Rds$", full.names = TRUE)
barData <- setNames(lapply(bar_data_files, function(f) readRDS(f)),
tools::file_path_sans_ext(basename(bar_data_files)))
# Then to get the foo dataset:
barData$foo()
# Or view the dataset names:
names(barData)
Run Code Online (Sandbox Code Playgroud)
自动完成也可以在这里工作。
更传统的方法可能是:
loadBarData <- function(dataset) {
bar_data_files <- list.files(".", #system.file("extdata", package = "bar"),
pattern = "\\.Rds$", full.names = TRUE)
files_sans_ext <- tools::file_path_sans_ext(basename(bar_data_files))
if (missing(dataset)) {
print(files_sans_ext)
} else {
if (!(dataset %in% files_sans_ext)) {
stop("Could not match dataset", dataset)
} else {
readRDS(bar_data_files[match(dataset, files_sans_ext)])
}
}
}
loadBarData() # List all available datasets
loadBarData("foo") # Loads "foo" is foo is found
Run Code Online (Sandbox Code Playgroud)
当然,如果您要求多个数据集(在一个向量中)等(例如,组合在一个列表中,或者如果数据集相似,则将数据集合并为一个),您当然可以对此进行扩展并定义您想要发生的情况。
如果数据集被系统地命名,人们还可以想象替代方案。
无论如何,我们的想法是让它在函数调用上加载。
| 归档时间: |
|
| 查看次数: |
391 次 |
| 最近记录: |