我想仅在需要数据时使用延迟分配从一组文件中加载一系列数据。但是由于这些文件将始终位于同一目录中(可能会四处移动),而不是对每个文件的位置进行硬编码(如果移动目录,稍后更改将很乏味),我只想简单地一个接受目录文件路径的函数。
loadLayers <- function(filepath) {
delayedAssign("dataset1", readRDS(file.path(filepath, "experiment1.rds")))
delayedAssign("dataset2", readRDS(file.path(filepath, "experiment2.rds")))
delayedAssign("dataset3", readRDS(file.path(filepath,"experiment3.rds")))
return (list <- (setOne = dataset1, setTwo = dataset2, setThree = dataset3)
}
Run Code Online (Sandbox Code Playgroud)
因此,与其在开始时加载所有数据集,我希望仅在需要时才加载每个数据集(这会加快闪亮的应用程序的速度)。
但是,在函数中执行此操作时遇到了问题。当 delayAssign 不在函数中时它起作用,但是当我将它们放在函数中时,列表中的所有对象都只返回 null,并且在需要时评估它们的“承诺”似乎没有实现。
实现这一目标的正确方法是什么?谢谢。
您的示例代码在 R 中不起作用,但即使从概念上讲,您正在使用delayedAssign,然后通过引用它立即解决它,return()因此您最终会加载所有内容。为了清楚起见,赋值是将符号绑定到环境中的值。因此,为了使其有意义,您的函数必须返回环境,而不是列表。或者,您可以简单地使用全局环境,并且该函数不需要返回任何内容,因为您将其用于其副作用。
loadLayers <- function(filepath, where=.GlobalEnv) {
delayedAssign("dataset1", readRDS(file.path(filepath, "experiment1.rds")),
assign.env=where)
delayedAssign("dataset2", readRDS(file.path(filepath, "experiment2.rds")),
assign.env=where)
delayedAssign("dataset3", readRDS(file.path(filepath, "experiment3.rds")),
assign.env=where)
where
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
364 次 |
| 最近记录: |