You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在tibble中传递对象至函数后如何获取该对象名称?

解决tibble中无法捕获传入对象名称的问题

你遇到的问题根源是tibble::tibble()的非标准求值机制,它会改变substitute()的执行上下文,导致在其内部调用时拿不到外部传入的对象名,只能获取到参数名x。

下面是两个可行的解决办法:

方法一:提前捕获变量名

先在tibble构造前完成对象名称的捕获,再将结果传入tibble:

my_tibble <- function(x){
  # 在tibble外部捕获传入的对象名
  var_name <- deparse(substitute(x))
  tibble::tibble(varname = var_name)
}

my_tibble(outcome)
#> # A tibble: 1 × 1
#>   varname
#>   <chr>  
#> 1 outcome

方法二:使用rlang的整洁评估工具

借助tibble依赖的rlang包提供的工具,直接捕获传入的符号并转换为字符:

my_tibble <- function(x){
  tibble::tibble(varname = rlang::as_name(rlang::ensym(x)))
}

my_tibble(outcome)
#> # A tibble: 1 × 1
#>   varname
#>   <chr>  
#> 1 outcome

简单来说,原来的写法中deparse(substitute(x))是在tibble的参数内部执行的,tibble对参数做了上下文隔离,此时substitute(x)只能拿到参数名x;把捕获逻辑移到tibble外部,或者用专门的符号捕获工具,就能正确获取外部传入的对象名称了。

内容的提问来源于stack exchange,提问作者John-Henry

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 20:55:58