如何让R语言警告信息显示调用函数而非辅助警告函数名?
解决R中警告信息显示调用者函数名的问题
你可以通过修改mywarn函数,利用warning()的call参数指定警告信息的调用上下文,让它指向调用mywarn的上层函数。
修改后的辅助警告函数
mywarn <- function() { # 获取上层调用的函数调用信息 caller_call <- sys.call(-1) warning("I warn you", call = caller_call) }
测试调用
在myfun中调用修改后的mywarn:
myfun <- function(x) { x <- x^2 mywarn() x } myfun(10)
输出的警告信息会变为:
Warning message: In myfun(10) : I warn you
原理说明
sys.call(-1)用于获取当前函数(mywarn)的上层调用表达式,也就是触发mywarn的那行代码对应的调用信息。- 将该值传入
warning()的call参数,就能让警告信息显示上层调用函数的名称,而非mywarn本身。
内容的提问来源于stack exchange,提问作者Karolis Koncevičius
相关产品推荐
相关产品推荐

