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

传递tibble到函数时出现mutate无适用于character类对象的报错

问题核心原因

  • 你调用purrr::map_dfr()时直接将tibble类型的dataframe_1传入了迭代参数.x,map类函数迭代数据框时默认按列遍历:每次传给自定义函数function_name的参数.x是单列向量,而非整个tibble。
  • dataframe_1第一列是字符型向量,因此调用mutate时会提示无法对character类对象执行操作。

第二段代码正常返回的原因

map_dfr()会自动将每次迭代返回的向量转为1列的临时结构,再自动按列合并所有迭代结果,刚好和原tibble结构一致,因此看起来像是正常识别了整个tibble,本质是巧合符合了你期待的输出,逻辑本身是错误的。


正确写法

如果你是想把dataframe_1到dataframe_4四个tibble都执行转换后按行合并,需要先把四个数据框放入列表,再传入map_dfr的迭代参数:

# 把要迭代的所有数据框放入列表
df_list <- list(dataframe_1, dataframe_2, dataframe_3, dataframe_4)

function_name <- function(.x) {
  .x %>%
  # 此处var3赋值可根据实际需求调整,示例为给每个数据框加来源标记
  mutate(var3 = paste0("来源df_", match(list(.x), df_list)))
}

print_table <- map_dfr(
  .x = df_list,
  .f = function_name
)

如果只是要给单个tibble执行转换,不需要用map,直接调用函数即可:

print_table <- function_name(dataframe_1)

内容的提问来源于stack exchange,提问作者C.Robin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:04