作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想仅在需要数据时才使用 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/
我是一名优秀的程序员,十分优秀!