推送返回父函数

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 中进行 Cox 回归后,将预测危险比列添加到数据帧中

    在 R 中运行 Cox PH 回归后 我需要在数据框中添加预测风险比的列 数据框是面板数据 其中 numgvkey 如果公司标识符 和年龄是时间标识符 您可以从此链接下载一小部分日期 https drive google com file
  • 从网络源获取 R 中的数据作为数据框

    我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data frame 直接加载到 R 中 该网站有 3 个下拉框 用于在下载 csv 文件之前选择选项 如下图所示 我试图从下拉框中选择 3 个值 并使用 下载 CSV 按钮将数据作
  • 如何使用 r 中的 caret 包在最佳调整超参数的 10 倍交叉验证中获得每次折叠的预测?

    我试图使用 R 中的插入符包使用 10 倍交叉验证和 3 次重复来运行 SVM 模型 我想使用最佳调整的超参数获得每次折叠的预测结果 我正在使用以下代码 Load packages library mlbench library caret
  • 将summary()写入as.data.frame以在ggplot / R中使用

    请查找 af 数据样本t below 我正在使用以下方法进行竞争风险分析etmCIF来自etm package 产生以下结果 这很好 但需要更好的图形 曾经有一个ggtrans etm函数将数据导入ggplot 然而 这个功能显然被删除了
  • dplyr 中的 Summarize 是否可以不删除数据框中的其他列?

    我有一个包含三列的数据框 我正在尝试进行简单的总结以查找数据框中每个城市的最高温度 但同时保留每个最高温度列出的日期 这是数据框 我们称之为 maxT new ID Date Max TemperatureF 1 TUS 1960 04 0
  • 在 mac (iMac OSX ) 终端中远程运行脚本(r 脚本)到其他计算机

    我有一个小示例脚本 script p r 如下所示 打算在终端中运行 usr bin Rscript sink output capture txt mn lt mean 1 10 and so on much longer list of
  • 如何让R使用所有处理器?

    我有一台运行 Windows XP 的四核笔记本电脑 但查看任务管理器 R 似乎一次只使用一个处理器 如何让 R 使用全部四个处理器并加速我的 R 程序 我有一个基本系统 我使用它在 for 循环上并行化我的程序 一旦您了解需要做什么 此方
  • 将值替换为其各自列的名称

    我有一个数据框 Code 401k CVS 101A true 231N true FD54 true 99JB 85F4 true 我试图用相应的列名称 例如 401k 替换 true 字符值 这是我想要的输出 Code 401k CVS
  • 将列表中的列转换为 R 中的数据框

    我有使用 R 创建的以下列表 set seed 326581 X1 rnorm 10 0 1 Y1 rnorm 10 0 2 data data frame X1 Y1 lst lt replicate 100 df smpl lt dat
  • dplyr,do(),从模型中提取参数而不丢失分组变量

    R 帮助中关于 do 的示例略有不同 by cyl lt group by mtcars cyl models lt by cyl gt do mod lm mpg disp data coefficients lt models gt d
  • 使用 dplyr:group_by 将数据帧分成多个子集?

    有没有办法根据 group by 组使用 dplyr 将一个数据帧拆分为数据帧的子集 mtcars gt group by cyl gear gt codes 非常感谢 好吧 并不是你真的想要 但你可以这样做tidyr 即nearly一样的
  • 限制数据框中所有单元格的字符串长度?

    您好 有没有一种方法可以限制 data frame 中所有列的字符串文本大小 而不必循环遍历每一列并一次使用 str trunc 之类的东西 例如下面的数据框 我可以将所有文本大小限制为仅 5 个字符 而不必一次只执行一列吗 如果有 50
  • 解析,用三点参数替换

    让我们考虑一个典型的deparse substitute R call f1 lt function u x y print deparse substitute x varU vu varX vx varY vy f1 u varU x
  • fread 将空导入为 NA

    我正在尝试导入带有空白的 csv 读取为 不幸的是他们都读作 NA now 为了更好地演示问题 我还展示了如何NA NA and 都映射到同一事物 除了最底部的示例 这将妨碍简单的解决方法dt is na dt lt gt write cs
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • R:将 JSON 时间格式转换为 POSIX

    我有一个 JSON 字符串 并将其放入数据框中 我能够做到这一点 但我在使用 apply 函数之一将所有时间字符串转换为 POSIX 格式时遇到问题 See here https stackoverflow com questions 90
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 使用predictNLS围绕R中的拟合值创建置信区间?

    我想使用 R 中 propogate 包中的 PredictNLS 围绕一大组拟合值构建置信区间 作为示例 我将使用它们在函数描述中引用的数据集 https rdrr io github anspiess propagate man pre
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想

随机推荐

  • 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