gpt4 book ai didi

r - 在函数中使用延迟赋值 : How do I send the promise back to the parent environment?

转载 作者:行者123 更新时间:2023-12-04 01:56:58 25 4
gpt4 key购买 nike

我想仅在需要数据时才使用 delayedAssign 从一组文件中加载一系列数据。但是由于这些文件将始终位于同一目录中(可能会四处移动),而不是对每个文件的位置进行硬编码(如果目录被移动,稍后更改会很乏味),我想简单地制作接受目录文件路径的函数。

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)
}

因此,我不想在开始时加载所有数据集,而是希望仅在需要时加载每个数据集(这样可以加快 shiny 应用程序的速度)。

但是,我在函数中执行此操作时遇到了麻烦。它在 delayedAssign 不在函数中时有效,但当我将它们放入函数中时,列表中的所有对象都简单地返回 null,并且在需要时评估它们的“ promise ”似乎没有实现。

实现此目标的正确方法是什么?谢谢。

最佳答案

您的示例代码在 R 中不起作用,但即使在概念上,您正在使用 delayedAssign 然后您立即通过在 return() 中引用它来解决它,所以无论如何,您最终都会加载所有内容。明确地说,赋值是将符号绑定(bind)到环境中的值。因此,为了使其有意义,您的函数必须返回环境,而不是列表。或者,您可以简单地使用全局环境,并且该函数不需要返回任何东西,因为您使用它会产生副作用。

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
}

关于r - 在函数中使用延迟赋值 : How do I send the promise back to the parent environment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35189760/

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