R 中的跟踪函数

2024-01-09

我想跟踪一个函数,以便它在调用时打印它的所有参数 当它返回结果时,它会打印返回值和参数。 函数跟踪允许定义在进入和退出函数调用时要执行的操作。 是否有一个函数返回函数内的参数列表,是否有一种方法无需执行多个分支中的每个分支即可获取结果值 每个分支在哪里退出函数?

在下面的示例中,跟踪应打印两个输入参数的列表 (或作为文本本身的函数调用)在调用时以及函数在任一分支中退出时的返回值。

myfun <- function(a,b){
  if (a==1) return(b+1)
  if (a==2) return(b*10)
  return(b)
}

您正在寻找的功能match.call() and returnValue():

myfun <- function(a,b){
    if (a==1) return(b+1)
    if (a==2) return(b*10)
    return(b)
}

trace("myfun", tracer = substitute(print(as.list(match.call()))),
      exit = substitute(print(returnValue())))
#> [1] "myfun"

myfun(1, 2)
#> Tracing myfun(1, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 1
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(1, 2) on exit 
#> [1] 3
#> [1] 3
myfun(2, 2)
#> Tracing myfun(2, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 2
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(2, 2) on exit 
#> [1] 20
#> [1] 20
myfun(3, 2)
#> Tracing myfun(3, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 3
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(3, 2) on exit 
#> [1] 2
#> [1] 2

Created on 2018-10-07 by the reprex package https://reprex.tidyverse.org (v0.2.1)

As 穆迪_弹涂鱼 https://stackoverflow.com/users/2270475/moody-mudskipper在评论中提到,您还可以使用quote()而不是substitute():

myfun <- function(a,b){
    if (a==1) return(b+1)
    if (a==2) return(b*10)
    return(b)
}

trace("myfun", tracer = quote(print(as.list(match.call()))),
      exit = quote(print(returnValue())))
#> [1] "myfun"

myfun(1, 2)
#> Tracing myfun(1, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 1
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(1, 2) on exit 
#> [1] 3
#> [1] 3
myfun(2, 2)
#> Tracing myfun(2, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 2
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(2, 2) on exit 
#> [1] 20
#> [1] 20
myfun(3, 2)
#> Tracing myfun(3, 2) on entry 
#> [[1]]
#> myfun
#> 
#> $a
#> [1] 3
#> 
#> $b
#> [1] 2
#> 
#> Tracing myfun(3, 2) on exit 
#> [1] 2
#> [1] 2

Created on 2018-10-07 by the reprex package https://reprex.tidyverse.org (v0.2.1)

有关两者之间差异的说明,请参见这个堆栈溢出问题 https://stackoverflow.com/questions/46834655/whats-the-difference-between-substitute-and-quote-in-r.

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

R 中的跟踪函数 的相关文章

  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • R:表格格式

    我有一个包含以下列的 Excel 文件 Column1 Column2 Column3 ab bb 0 5 ab bc 0 1 ab cd 0 7 ab dd 0 8 ac bb 0 2 ac bg 0 8 ac ee 0 8 ac dd
  • 为什么这些数字不相等?

    下面的代码显然是错误的 有什么问题 i lt 0 1 i lt i 0 05 i 1 0 15 if i 0 15 cat i equals 0 15 else cat i does not equal 0 15 i does not eq
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • 如何计算嵌套函数中的粘合表达式?

    我正在尝试嵌套一个函数 该函数将两个字符串粘合在一起 该函数使用组合字符串来命名数据帧的列 然而 问题似乎是粘合表达式没有足够早地评估为字符串 我可以 并且应该 强制在将表达式作为参数传递给另一个函数之前对其进行求值吗 library ti
  • C 编程:seg 错误、printf 和相关的怪癖[重复]

    这个问题在这里已经有答案了 正如许多年轻的程序员所做的那样 我了解到在代码中的不同点插入大量 here1 here2 等打印到控制台语句的有用性 以找出我的程序何时出错 在我的计算机科学学习过程中 这种强力调试技术已经拯救了我很多很多次 然
  • 如何匹配 R 中的所有匹配项?

    我有 1000 个名字的列表 说A 我还有另外 5 个名字的清单 说B 我想找出这5个名字出现在1000个号码列表中的第几行 例如 Amy 在 A 中可以出现 25 次 B 里有艾米 我想知道 Amy 出现在 A 中的哪些行 我以前使用过
  • 使用predictNLS围绕R中的拟合值创建置信区间?

    我想使用 R 中 propogate 包中的 PredictNLS 围绕一大组拟合值构建置信区间 作为示例 我将使用它们在函数描述中引用的数据集 https rdrr io github anspiess propagate man pre
  • 如何将 ggrough 图表另存为 .png

    说我正在使用R包裹ggrough https xvrdm github io ggrough https xvrdm github io ggrough 我有这个代码 取自该网页 library ggplot2 library ggroug
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想
  • iOS 应用程序测试。应用程序安装失败。找不到代码签名[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我尝试在多个 iOS 设备上安装我的应用程序 但这件事不让我这么做 我想知道 问题是什么以及我应该如何解决它 就我而言
  • 如何针对 Google Chrome 调试 Silverlight

    有谁知道如何从 Visual Studio 调试在 Google Chrome 中运行的 Silverlight 2 应用程序 即使在确定之后Chrome是调试浏览器 https stackoverflow com questions 59
  • 如何修改秤包生成的标签?

    所以我正在制作金字塔可视化 我在用着scale y continuous labels scales label number si accuracy 0 1 来生产标签 但是 我想去掉图表女性部分的负号 我认为保留 SI 后缀但删除负号的
  • R Tidytext 和 unnest_tokens 错误

    对 R 非常陌生 已经开始使用 tidytext 包 我正在尝试使用参数来填充unnest tokens函数 这样我就可以进行多列分析 所以而不是这个 library janeaustenr library tidytext library
  • 使用许多特殊字符将 R 连接到 HANA 数据库时出现问题

    我在将 HANA 数据读入 R 时遇到问题 我已通过以下方式建立了连接 ch lt odbcConnect HANA uid USER pwd PW 并确认我已通过以下方式连接 sqlTables ch 这会调出我的表格列表 对我想要拉取的
  • 如何调试 Silex 框架中的 php 致命错误

    我想知道如何看到这样的语法错误 缺少分号 这将导致 WSOD 白屏死机 我尝试包含一个调试配置文件 如下所示 use Symfony Component Debug ErrorHandler use Symfony Component De

随机推荐

  • 物理设备无法在 Android Studio 中工作:多个 RSA 密钥指纹,但只有一个 adbkey.pub

    我使用 Pixel 2xl 和 MacBook Pro 进行开发 我有一个问题几个月来一直困扰着我 当我将手机连接到电脑时 我会看到经典的弹出窗口 询问 允许 USB 调试 计算机的 RSA 密钥指纹是 xx xx xx xx xx xx
  • C# 中属性声明中的“new”关键字

    我需要维护一个 NET 项目 我只是浏览代码 我在属性声明中注意到了这一点 public new string navUrl get return set 我想知道什么是new修改器对属性做什么 它隐藏了基类的 navUrl 属性 看新修改
  • 在已设置的图像 swift 4 之上加载图像的问题

    我的 cellForItemAtIndexPath 中遇到问题 我将图像设置为单元格的 UIButton 但每次滚动 collectionView 的单元格时 它都会一次又一次地将图像放置在已设置的图像之上 我可以看出 因为图像的阴影越来越
  • Msbuild ItemGroup 排除不适用于通配符

    该项目组ItemsFromAnotherTarget包含 References AnotherFolder ReferencedAssembly dll bin GeneratedAssembly1 dll bin GeneratedAss
  • React 原生导航 useTheme()

    我正在尝试直接从样式访问 useTheme 但到目前为止我的解决方案似乎不起作用 我没有返回错误 有办法做我想做的事吗 import StyleSheet from react native import useTheme from rea
  • 如何测试 RSpec 中是否调用方法但不覆盖返回值

    已经有问题 https stackoverflow com questions 21262309 rspec test to see if a method was called与此类似 但它们都将返回值重写为nil unless and
  • JavaScript - 在 Safari 上执行代码之前可用的对象定义

    我只需要在页面加载时执行一次的对象和函数被包装在undefined检查物体 在我通常使用的 Windows Linux 上的 Chrome 上 代码运行得很好 即代码只执行一次 但在 iPad 和 MacBook 上的 Safari 上 未
  • 为什么我无法在 C# 中序列化元组? [复制]

    这个问题在这里已经有答案了 可能的重复 为什么 XML Serialized 类需要无参数构造函数 https stackoverflow com questions 267724 why xml serializable class ne
  • 沿着贝塞尔曲线路径放置图像

    有谁知道如何沿着贝塞尔路径放置图像 我可以很好地编写路径并沿着路径为精灵设置动画 但我想让路径成为一系列箭头而不是虚线 我认为一定有一种方法可以在整个路径上添加箭头图像 但找不到它 而且路径都是弯曲的 UIBezierPath path U
  • 如何复制带有指向内部数据的指针的结构(以便复制它们指向的指针和数据)?

    所以我有一个像这样的结构 struct GetResultStructure int length char ptr 我需要一种方法来制作它的完整副本 这意味着我需要一个副本来拥有一个结构 其中新的 ptr 指向我在原始结构中拥有的数据副本
  • 自定义 datagridview 的结果

    当我的客户 BindingSource 从 datagridview 搜索客户时 当找不到匹配项时 我需要一个显示 未找到结果 的消息框 而不仅仅是 什么也不显示 尝试这个 Dim emptyRowCount As Integer IIf
  • 使用调色板功能时使 NA 透明

    这是我的数据框 Test structure list Corr p c 0 65 0 64 0 64 NA 0 79 0 77 Case p c 24 57 12 89 20 92 NA 11 1 12 2 Control p c 16
  • 为绘图应用程序添加撤消功能

    我关注了一个raywenderlich 教程 http www raywenderlich com 87899 make simple drawing app uikit swift关于使用 UIKit 制作绘图应用程序 我现在正在尝试添加
  • 居中位图标记(Google 地图 Android API v2)

    当我从自定义位图中添加标记时 标记未以我指定的点为中心 我这样添加 ID tramo final int tramoId tr getId Nodos final Nodo nodos tr getNodos final PolylineO
  • 如何使用 php 解析 .plist 文件?

    我可以用 php 解析 plist 文件并将其放入数组中吗 POST 这样我就可以打电话 POST body 并获取具有以下内容的字符串
  • 如何在 Emacs 中突出显示选项卡

    我在源代码中使用空格进行缩进 如何突出显示 标记代码中的选项卡 可能是红色的 和我用的时候一样 setq default show trailing whitespace t 作为 abo abo 的提示 我发现我可以在以下代码中使用空白模
  • HttpClient 存储在哪个程序集中

    我想使用HttpClient来自 WCF Rest Service 的类 用于创建调用 Rest 的客户端 服务 我听说它已被纳入 net 4 0 但不知道它存储在哪个程序集中 根据这个 MSDN 页面 http msdn microsof
  • ViewModel 中的 ASP.NET MVC SelectList

    我正在使用 ASP NET MVC 5 但这很可能也适用于以前的版本 提出这个问题的最佳方法是向您展示代码 这是视图模型 public class PersonCreateViewModel public SelectList cities
  • 有没有办法将 UNC 路径映射到 Windows 2003 上的本地文件夹?

    我知道我可以将 UNC 路径映射到本地驱动器号 但是 我想知道是否有办法将 UNC 路径映射到本地文件夹 我有一个程序 其中硬编码到程序中的特定文件夹 我想尝试创建一个映射到 UNC 路径的同名文件夹 以便可以从网络共享访问数据 这可行吗
  • R 中的跟踪函数

    我想跟踪一个函数 以便它在调用时打印它的所有参数 当它返回结果时 它会打印返回值和参数 函数跟踪允许定义在进入和退出函数调用时要执行的操作 是否有一个函数返回函数内的参数列表 是否有一种方法无需执行多个分支中的每个分支即可获取结果值 每个分