R语言中如何判断函数调用输出是否被存储至变量?
在R语言中判断函数调用输出是否被存储到变量中
可以通过检查函数的调用上下文实现该需求,核心是获取当前函数的上级调用,判断其是否为赋值操作。
实现代码
fun <- function(x, y){ # 获取调用当前函数的上级表达式 parent_call <- sys.call(-1) # 判断是否为赋值操作(覆盖<-、=、<<-三种赋值符) is_assigned <- !is.null(parent_call) && is.call(parent_call) && as.character(parent_call[[1]]) %in% c("<-", "=", "<<-") # 输出判断结果 print(is_assigned) # 返回计算结果 sum(x, y) }
测试验证
a <- fun(1, 2) # 控制台输出 TRUE,结果被存储到变量a fun(1, 2) # 控制台输出 FALSE,结果未存储 b <- fun(1, 2) # 控制台输出 TRUE,结果被存储到变量b print(fun(1,2))# 控制台输出 FALSE,结果作为参数传入print,未赋值给变量
原理说明
sys.call(-1):获取当前函数的上一级调用对象,也就是触发fun执行的那行代码对应的表达式结构。- 赋值表达式在R的调用结构中,会以
<-/=/<<-作为调用的第一个元素,通过检查这一点就能判断函数返回值是否被存储到变量中。
内容的提问来源于stack exchange,提问作者Onyambu
相关产品推荐
相关产品推荐

