传递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
相关产品推荐
相关产品推荐

