You need to enable JavaScript to run this app. R自定义函数中将列表名作为字符串传入mutate列的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

R自定义函数中将列表名作为字符串传入mutate列的实现问题

问题原因

你将deparse(substitute(list_name))写在了map_df的内部匿名函数中,substitute()会在当前运行环境捕获符号名称,匿名函数的内部环境中list_name是形参名,因此最终得到的是"list_name"而非传入的实参名称。

解决方法

在进入map_df循环前,先在外层函数的环境中提前捕获传入的实参名称,存为字符串变量后再在mutate中调用即可。

修改后完整代码
# 需提前加载依赖包
library(purrr)
library(dplyr)
library(rbenchmark)

a_list = c('a','b','c')

test = function(list_name) {
  # 在外层函数环境预先捕获传入的列表名称
  input_list_name <- deparse(substitute(list_name))
  map_df(list_name, function(x) {
    benchmark(x = paste(x,'test')) %>% 
      mutate(test = x,
             list_name_as_string = input_list_name)
  })
}

test(a_list)
输出效果

运行修改后的代码,list_name_as_string列的所有值都会变为你需要的"a_list":

test replications elapsed relative user.self sys.self user.child sys.child list_name_as_string
1    a          100       0       NA         0        0         NA        NA              a_list
2    b          100       0       NA         0        0         NA        NA              a_list
3    c          100       0       NA         0        0         NA        NA              a_list

内容的提问来源于stack exchange,提问作者jkud

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:15:04