R中的跟踪函数
我想跟踪一个函数,以便它在调用时打印所有参数 当它返回结果时,它会打印返回值和参数。 函数跟踪允许定义在进入和退出函数调用时要执行的操作。 是否有函数返回函数中的参数列表,是否有一种方法可以在不执行多个分支的情况下获取结果值 每个分支退出函数的位置 在下面的示例中,跟踪应打印两个输入参数的列表 函数在任何一个分支中退出时的调用和返回值R中的跟踪函数,r,debugging,R,Debugging,我想跟踪一个函数,以便它在调用时打印所有参数 当它返回结果时,它会打印返回值和参数。 函数跟踪允许定义在进入和退出函数调用时要执行的操作。 是否有函数返回函数中的参数列表,是否有一种方法可以在不执行多个分支的情况下获取结果值 每个分支退出函数的位置 在下面的示例中,跟踪应打印两个输入参数的列表 函数在任何一个分支中退出时的调用和返回值 myfun <- function(a,b){ if (a==1) return(b+1) if (a==2) return(b*10) ret
myfun <- function(a,b){
if (a==1) return(b+1)
if (a==2) return(b*10)
return(b)
}
myfun只需将其与.trace名称重叠即可
myfun.trace <- function(a,b){
if (a==1) return({{"a","b"},{a,b}},{b+1})
if (a==2) return({{"a","b"},{a,b}},{b*10})
return({{"a","b"},{a,b}},{b}) }
myfun.trace您正在查找函数match.call()
和returnValue()
:
myfun[1]“myfun”
我的乐趣(1,2)
#>在进入时跟踪myfun(1,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 1
#>
#>b美元
#> [1] 2
#>
#>在退出时跟踪myfun(1,2)
#> [1] 3
#> [1] 3
我的乐趣(2,2)
#>进入时跟踪myfun(2,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 2
#>
#>b美元
#> [1] 2
#>
#>在退出时跟踪myfun(2,2)
#> [1] 20
#> [1] 20
我的乐趣(3,2)
#>进入时跟踪myfun(3,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 3
#>
#>b美元
#> [1] 2
#>
#>在出口跟踪myfun(3,2)
#> [1] 2
#> [1] 2
由(v0.2.1)于2018年10月7日创建
如前所述,在注释中,您还可以使用quote()
而不是substitute()
:
myfun[1]“myfun”
我的乐趣(1,2)
#>在进入时跟踪myfun(1,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 1
#>
#>b美元
#> [1] 2
#>
#>在退出时跟踪myfun(1,2)
#> [1] 3
#> [1] 3
我的乐趣(2,2)
#>进入时跟踪myfun(2,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 2
#>
#>b美元
#> [1] 2
#>
#>在退出时跟踪myfun(2,2)
#> [1] 20
#> [1] 20
我的乐趣(3,2)
#>进入时跟踪myfun(3,2)
#> [[1]]
#>我的乐趣
#>
#>一美元
#> [1] 3
#>
#>b美元
#> [1] 2
#>
#>在出口跟踪myfun(3,2)
#> [1] 2
#> [1] 2
由(v0.2.1)于2018年10月7日创建
有关两者之间差异的说明,请参见。投票表决结果,但可能引用
比替换
更有意义?(相同的输出)@Moody_mudscapper添加了一条注释,说明两者的输出相同,并提供了一个链接,说明两者之间的差异。