我试图跟踪从控制台调用某些函数的次数。
我的计划是在每个函数中添加一个简单的函数,例如“trackFunction”,可以检查它们是从控制台调用还是作为底层函数调用。
尽管这个问题听起来很简单,但由于我在函数编程方面的知识有限,我找不到解决这个问题的好方法。我一直在查看调用堆栈和 rlang::trace_back 但没有一个好的解决方案。
任何帮助表示赞赏。
Thanks
一个简单的方法是查看当前帧位于哪个级别。也就是说,如果在解释器中直接调用一个函数,那么sys.nframe()
回报1
, 否则2
或更高。
Relate:
Rscript 检测 R 脚本是否正在被调用/源自另一个脚本 https://stackoverflow.com/questions/47932246/rscript-detect-if-r-script-is-being-called-sourced-from-another-script/47932989#47932989
myfunc <- function(...) {
if (sys.nframe() == 1) {
message("called from the console")
} else {
message("called from elsewhere")
}
}
myfunc()
# called from the console
g <- function() myfunc()
g()
# called from elsewhere
不幸的是,这可能并不总是直观的:
ign <- lapply(1, myfunc)
# called from elsewhere
for (ign in 1) myfunc()
# called from the console
虽然对于很多事情来说lapply
-家庭和for
循环是相似的,它们在这里的行为是分开的。如果这是一个问题,也许缓解这个问题的唯一方法是分析/解析调用堆栈,并可能“忽略”某些函数。如果这就是你need,那么也许这样更合适:
R 如何检查某个包中的特定函数中是否调用了自定义函数 https://stackoverflow.com/questions/62746607/r-how-to-check-that-a-custom-function-is-called-within-a-specific-function-from/62747050#62747050
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)