如何在R函数中实现执行中断且不在控制台打印返回值
问题原因解释
invisible() 是R中用于控制返回值打印行为的函数,本身不具备中断函数执行的作用,这是代码不符合预期的根本原因。
两个函数的执行逻辑差异如下:
bar()中使用的return()是专门的函数终止语句:条件满足触发return()时,函数会直接终止运行,返回return()传入的参数(无参数时默认返回NULL),后续的"something else"代码完全不会被执行,因此运行bar()得到NULL。foo()中仅调用了invisible():条件满足时invisible()只是执行了「将传入参数标记为不自动打印」的操作,执行完成后函数会继续向下运行,最终返回最后一行代码的结果"something else",因此运行foo()会得到字符串输出。
正确实现方式
如果你的需求是满足条件时,既中断函数执行,又返回不可见的结果,需要将invisible()嵌套在return()内使用,示例如下:
foo <- function() { if (file.exists("data/some.rds") | (1 + 1 == 2)) return(invisible()) "something else" }
修改后的函数效果:
- 直接运行
foo()不会在控制台打印任何输出 - 执行
res <- foo()后可以正常获取返回值NULL,手动调用print(res)即可看到结果
内容的提问来源于stack exchange,提问作者pietrodito
相关产品推荐
相关产品推荐

