r - R闭包不能访问闭包内的变量
问题描述
我正在从普通的 R 代码转向 R 函数。为了使用 R 闭包,我包装了 2 个函数(身份验证和下载),其中(下载)依赖于需要来自身份验证的输入。
我的理解是,如果我创建一个闭包,闭包内的变量应该可以被整个闭包内部访问。如果是这种情况,为什么函数 [downloadData] 无法从 [authenticationKeys] 获取变量?
目前我正在通过将(认证)和(下载)放在单独的 R 文件中并将它们采购到 main.R 中来解决问题。问题是,尽管我随后将变量的结果放入了似乎不推荐的全局范围内。此外,通过获取文件,我无法利用函数参数,也无法通过在需要时仅调用部分代码来利用函数式编程的优势。
runAll <- function() {
# Authentication
authenticate <- function() {
auhtenticationKeys <- list (
"key1" = 1,
"key2" = 2,
"key3" = 3
)
}
authenticate()
# Download
downloadData <- function() {
# Access authentication keys:
auhtenticationKeys$key1
auhtenticationKeys$key2
auhtenticationKeys$key3
myData <- list (
"open" = 10,
"high" = 11,
"low" = 12,
"close" = 13
)
}
downloadData()
}
runAll()
解决方案
您始终可以将您感兴趣的变量分配给您正在处理的闭包之外的其他环境:
runAll <- function() {
# Authentication
authenticate <- function() {
auhtenticationKeys <- list (
"key1" = 1,
"key2" = 2,
"key3" = 3
)
assign("auhtenticationKeys",auhtenticationKeys, envir=parent.frame())
}
authenticate()
# Download
downloadData <- function() {
# Access authentication keys:
auhtenticationKeys$key1
auhtenticationKeys$key2
auhtenticationKeys$key3
myData <- list (
"open" = 10,
"high" = 11,
"low" = 12,
"close" = 13
)
}
downloadData()
}
runAll()
通过这一行:
assign("auhtenticationKeys",auhtenticationKeys, envir=parent.frame())
您的密钥在下载数据中可用,您可以运行您的代码。你可以在这里看到更多:http: //adv-r.had.co.nz/Environments.html#function-envs
推荐阅读
- python - 如何更改字典中的答案键?
- jquery - 在 URL 上时将活动类添加到 li
- c# - 下拉列表自动变为多个
- elasticsearch - 获取聚合弹性搜索的所有存储桶
- go - 为什么我的代码中没有这个缓冲通道块?
- amazon-web-services - kubectl:错误:您必须登录到服务器(未经授权)
- html - 使用 UpdateView 在 HTML 中循环遍历 foreignKey 对象
- r - 绘制字符
- node.js - 希望在 nestjs 解析器中使用 delegateToSchema
- android - Android:如何配置具有背景颜色和居中图像的加载屏幕