推送返回父函数

2024-01-27

有没有办法强制父函数返回输出?假设我有一个“做某事”的函数,并且在每个函数的开头想要“检查某事”。如果检查失败我想返回“其他东西”。

在我下面的示例中,“做某事”是对数,“检查某事”意味着检查变量是否为非负数,“其他事情”是否为负无穷大。

weird_log <- function(x) {
  check(x)
  log(x)
}

check <- function(x) {
  if (x <= 0)
    eval.parent(parse(text = 'return(-Inf)'))
}

这个例子不起作用

weird_log(10)  # 2.302585
weird_log(-10) # NaN

一种解决方案是,如果检查发现问题,则从检查函数返回“其他内容”,并且NULL否则。那我可以写一篇if在父函数中就完成了。

weird_log <- function(x) {
  y <- check(x)
  if (!is.null(y)) return(y)
  log(x)
}

check <- function(x) {
  if (x <= 0) {
    -Inf
  } else {
    NULL
  }
}

该解决方案仍然将大部分功能保留在分离的功能中check()但有没有办法拥有其中的所有功能呢?


在实际问题中,检查函数不仅仅进行一次比较,而且它在多个函数中使用,因此有必要单独使用它。还有返回的“其他东西”check功能取决于输入失败的条件。


更现实的例子:

weird_log <- function(input) {
  y <- check(input)
  if (!is.null(y)) return(y)
  list(log = log(input$x))
}

check <- function(input) {
  if (is.null(input$x)) {
    list(error = 'x is missing')
  } else if (!is.numeric(input$x)) {
    list(error = 'x is not numeric')
  } else if (x <= 0) {
    list(log = -Inf, warn = 'x is not positive')
  } else {
    NULL
  }
}

因为答案实际上并没有回答这里的问题是如何做你所问的事情。

returnFromParent <- function() {
  call <- rlang::expr(return()) 
  rlang::eval_bare(call, env = parent.frame())
}

foo <- function(){
  returnFromParent()
  print("you should not see this")
}

foo()

我发现做到这一点的唯一方法是使用 rlang。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推送返回父函数 的相关文章

  • 按列分组的数据帧上 R 中的行之间的差异

    我希望通过 app name 获得不同版本的计数差异 我的数据集如下所示 app name version id count difference 这是数据集 data structure list app name structure c
  • 带有nearPoints()的动态ggplot图层闪亮

    我熟悉闪亮的基础知识 但在这里遇到了一些困难 我希望能够在单击某个点以突出显示该点时添加 ggplot 图层 我知道 ggvis 可以做到这一点 并且画廊中有一个很好的例子 但我希望能够使用nearPoints 捕获点击作为 ui 输入 我
  • Plotly 绘图不会在 RMarkdown 文档的 for 循环内渲染

    我正在尝试动态构建一个需要运行循环的报告 并为每次迭代打印一些消息 表格和绘图 我可以让一切正常运转except为了情节 示例 rmd r echo FALSE results asis fig keep all message FALSE
  • 确定向量中是否存在元素的最有效方法

    我有几种算法取决于确定元素是否存在于向量中的效率 在我看来 这 in 这相当于is element 应该是最有效的 因为它只返回一个布尔值 在测试了几种方法之后 令我惊讶的是 这些方法是迄今为止效率最低的 以下是我的分析 随着向量大小的增加
  • 如何检测环境是在 Azure 托管服务工作者角色中进行暂存还是生产?

    我在托管服务中担任辅助角色 工作人员每天都会发送电子邮件 但在托管服务中 有 2 个环境 Staging 和 Production 所以我的工人角色每天发送电子邮件 2 次 我想知道如何检测工人是否处于停滞状态或生产状态 提前致谢 根据我的
  • 使用pivot_longer将R中的多列变成一列[重复]

    这个问题在这里已经有答案了 我有一个dfpopulation看起来像这样 未列出所有列和行 Region X1975 X1976 X1977 X2008 National Total 942420 93717 94974 132802 Be
  • 在 Shiny 应用程序中过滤数据时,长度为 1 的字符向量除了第一个元素之外的所有元素都将被忽略错误

    我有以下闪亮的应用程序 library shiny library rhandsontable library shinydashboard library ggplot2 library dplyr setwd C Users Marc
  • 在ggplotly散点图中添加自定义数据标签

    我想显示Species对于每个数据点 当光标位于该点上方而不是 x 和 y 值时 我用iris数据集 另外 我希望能够单击数据点以使标签持久存在 并且当我在图中选择新位置时标签不会消失 如果可能的话 最基本的是标签 持久性问题是一个优点 这
  • 在 R 中将时间间隔数据扩展为天数

    假设我有如下所示的数据 interval id indiv id role start date end date 1 1 A 2006 05 01 2006 06 16 2 1 B 2006 06 16 2006 10 16 3 1 A
  • 具有动态变量数的公式

    假设有一些 data framefoo data frame想要找到目标列的回归Y由其他一些专栏 为此目的 通常使用一些公式和模型 例如 linear model lt lm Y FACTOR NAME 1 FACTOR NAME 2 fo
  • 使用管道语法处理模型列表

    我经常喜欢拟合和检查与 R 数据框中的两个变量相关的多个模型 我可以使用如下语法来做到这一点 require tidyverse require broom models lt list hp exp cyl hp cyl map df m
  • R:为什么 boxplot(x,log="y") 与 boxplot(log(x)) 不同?

    delme lt exp rnorm 1000 1 5 0 3 boxplot delme log y boxplot log10 delme 为什么这两个图中的胡须不同 谢谢 阿古斯 我想说的是 在您的第一个图中 您只是将 y 轴更改为对
  • R:根据元素长度从向量中删除元素

    如何根据字符串的字符数或长度从字符串向量中删除元素 df lt c asdf fweafewwf af aewfawefwef awefWEfawefawef gt df 1 asdf fweafewwf af aewfawefwef aw
  • R texreg:如何选择要显示的 gof 统计信息?

    我正在使用 texreg 通过 plm 生成面板回归的输出表 我想抑制所有 gof 统计数据的输出 这不是显示 R2 adj R2 和 N 我只想显示 adj R2 有谁知道一个简单的方法来做到这一点 好吧 这实际上很简单 只需在调用中包含
  • 访问 R 工作区中的数据[重复]

    这个问题在这里已经有答案了 我是自学 R 的 可能有一些非常基本的东西我可能不熟悉 如果是这样我道歉 我正在尝试访问外部来源提供给我的数据 它作为一个工作空间出现 我的流程如下 gt ls 1 2003OHT HR gt attach 20
  • rpart是自动剪枝吗?

    Is rpart自动修剪 生成的决策树rpart比具有自动修剪功能的 Oracle Data Mining 生成的级别要多得多 否 但拟合函数的默认值可能会 提前 停止分割 对于 早期 的某些定义 See rpart control对于您可
  • C# 要么返回 false 要么什么也不做

    我想知道是否有办法不必重复相同的事情如果施工而是调用一个状态检查 成功后无法返回true 有人知道这个问题更好的标题吗 bool Enable if GetStatus ref status Trace WriteLine Error re
  • 聚合日期时间以总结在特定条件下花费的时间

    我很困惑我应该如何继续 我下面有一些虚拟数据 Date lt as POSIXct c 2018 03 20 11 52 25 2018 03 22 12 01 44 2018 03 20 12 05 25 2018 03 20 12 10
  • R:如何找到向量的模式[重复]

    这个问题在这里已经有答案了 下面是我的data frame我想知道每个内存类别 1 到 8 的模式是什么 gt dput d structure list MEMORY1 c 5 5 7 1 5 6 4 5 4 5 5 4 1 5 5 2
  • 如何有效地将多个光栅 (.tif) 文件导入 R

    我是 R 新手 尤其是在空间数据方面 我正在尝试找到一种方法来有效地将多个 600 单波段栅格 tif 文件导入到 R 中 所有文件都存储在同一文件夹中 不确定这是否重要 但请注意 在我的 Mac 和 Windows 并行 VM 上的文件夹

随机推荐

  • RTE 显示我自己的 CSS 类作为选择的正确配置是什么?

    RTE 的配置随每个 大 版本而变化 现在我已经安装了第一个 7 6 我需要配置 RTE 以便编辑者可以为段落 跨度或表格设置特殊的类 例如编辑器应该能够选择表格 bootstrap 的默认样式 table striped table bo
  • iOS - 根据百分比用多种颜色填充bezierPath

    我在 Objective C 中画了一个 UIBezierPath 并用红色填充它 现在 我想根据百分比用多种颜色填充路径 例如 我想用 20 的绿色填充路径 用红色填充剩余的 80 彼此重叠 不是渐变 我还想要填充和描边之间有几个像素的间
  • ElasticSearch 在匹配查询中考虑词序

    假设我的索引有两个文档 富酒吧 富酒吧 当我对 bar foo 进行常规匹配查询时 两个文档都正确匹配 但它们获得相同的相关性分数 但是 我希望评分时单词的顺序很重要 换句话说 我希望 bar foo 有更高的分数 因此 我尝试将匹配查询放
  • 如何批量添加文件夹名到文件名?

    我有一个像这样的文件夹结构 1 1 master jpg 1 2 master jpg 1 3 master jpg 2 1 master jpg 2 2 master jpg 2 3 master jpg 我需要将所有图像导入到网站 但文
  • int argc, char *argv[] 是什么意思?

    在许多 C IDE 和编译器中 当它为您生成 main 函数时 它看起来像这样 int main int argc char argv 当我在没有 IDE 的情况下仅使用命令行编译器编写 C 代码时 我输入 int main 没有任何参数
  • 在BackgroundWorker线程上创建FlowDocument

    我需要动态生成一个FlowDocument来自大量数据 由于该过程需要几分钟时间 因此我想在后台线程上执行该操作 而不是让 UI 挂起 但是 我无法生成FlowDocument在非 UI 线程上尝试插入矩形和图像会导致运行时错误 抱怨它不是
  • java中System.out.write和System.out.print有什么区别[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想知道两者的区别在哪里System out write and System out print在我的 Java 课上 两种方法Pr
  • 来自 Azure TableStorage 的 TableQuery,根据 PartitionKey 进行筛选

    我试图通过partitionKey从表中抽象获取所有实体 如下所示 public List
  • “无效的正则表达式...原因是 R 中的 gsub 出现“尾随反斜杠”错误

    我在 R 中替换文本时收到错误消息 x 1 Easy bruising and bleeding gsub as character x Error in gsub as character x invalid regular expres
  • 如何在 MATLAB 中中止正在运行的程序?

    有时 在调用一个函数后 需要大约 30 分钟才能完成 您意识到自己做错了什么 并想要停止程序 在 MATLAB 中如何做到这一点 我所做的是完全关闭 MATLAB 并重新启动 我想会有办法中止执行函数的替代 有人知道那是什么吗 Hittin
  • Java - 如何将文件移动到 zip 文件中?

    就是这样 我有一个文本文件 我需要将其移动到给定目录中的 现有 Zip 文件 File file new File C afolder test txt File dir new File directoryToGo existingzip
  • X86_64 - 汇编 - 为什么位移不是 64 位?

    我正在读英特尔 x86 64 指南第 1 卷刷新内存寻址的工作原理 Still 3 7 5 指定偏移量 内存地址的偏移部分可以直接指定为静态值 称为位移 也可以通过由以下一个或多个组成部分组成的地址计算来指定 位移 8 位 16 位或32
  • 如何在 ruby​​ 中格式化日期以包含“rd”,如“3rd”

    我想格式化日期对象 以便可以显示 7 月 3 日 或 10 月 1 日 等字符串 我在 Date strftime 中找不到生成 rd 和 st 的选项 有人知道怎么做吗 除非你正在使用Rails 添加这个排序方法 无耻的代码 从 Rail
  • 在 django 管理列表视图中上传 CSV 文件,替换添加对象按钮

    我想替换管理页面列表视图中的添加对象按钮 其基本思想是 管理员可以下载数据库中所有模型的数据 使用工具编辑数据 然后作为 CSV 文件重新上传 在列表视图中 我正在努力覆盖表单 因为设置 class SomeModelForm forms
  • 将字节转换为浮点数是否安全,或者可能会产生未定义的行为?

    是否存在字节序列 当转换为f32 or f64 在 Rust 中产生未定义的行为 我将非有限值 例如 NaN Infinity 等 计算为有效浮点值 评论给这个答案 https stackoverflow com a 43708483 43
  • 如何处理 Firefox 扩展中的每个请求?

    我试图捕获并处理网页或其中的插件即将发出的每个请求 例如 如果您打开控制台并启用网络日志记录 则当即将发送 HTTP 请求时 控制台会在其中显示该请求 我想捕获每个链接并调用我的函数 即使视频是由 Flash 播放器加载的 也登录到控制台
  • JPA 还是 Hibernate 用于 Java 持久性?

    我正在研究 Java NET 和 Groovy 中的企业应用程序的开发 对于每个平台 我们将尝试实现一个简单的 SOAP Web 服务有多困难 我们将使用最常用的工具和库来尽可能准确地研究现实世界 就这一点而言 当使用Hibernate进行
  • VB6 生成后,如何在 Azure Devops 中设置复制文件任务?

    作为回应关于为 VB6 项目制作 Azure 构建管道的问题 https stackoverflow com questions 54796027 how do i specify my custom agent in the build
  • PHP 中的静态函数变量和串联

    考虑以下 var foo bar Not a member of a class free standing or in a function 我一标记 var as static 然而 static var foo bar PHP WAM
  • 推送返回父函数

    有没有办法强制父函数返回输出 假设我有一个 做某事 的函数 并且在每个函数的开头想要 检查某事 如果检查失败我想返回 其他东西 在我下面的示例中 做某事 是对数 检查某事 意味着检查变量是否为非负数 其他事情 是否为负无穷大 weird l