R语言中如何提取传入函数的列表对象名称并转为字符串存储
R语言自定义函数提取传入对象的变量名解决方案
基础版(无需额外依赖)
my_function <- function(obj, arg = NULL) { # 注意:此行必须放在所有修改obj的操作之前 obj_string <- deparse(substitute(obj)) # 函数内部任意位置都可以直接调用obj_string print(obj_string) }
测试效果
list_name <- list(x = 1, y = 2) my_function(list_name) # 输出:[1] "list_name"
鲁棒版(适配嵌套函数、管道调用场景)
需要使用rlang包,适配更复杂的调用场景,规避基础版的边界问题:
library(rlang) my_function <- function(obj, arg = NULL) { obj_string <- as_name(ensym(obj)) # 函数内部任意位置都可以直接调用obj_string print(obj_string) }
之前方法失效的常见原因
- 提取名字的代码没有放在函数最开头,执行
substitute之前已经修改过obj参数的值,导致捕获的是修改后的表达式而非原始传入的变量名 - 函数存在嵌套调用场景,基础的
substitute无法跨函数捕获上层传入的原始变量名,换用rlang版本即可解决
内容的提问来源于stack exchange,提问作者GNicoletti
相关产品推荐
相关产品推荐

