R语言生成列名与最大字符串长度拼接串的更简洁实现方案
优化实现方案
下面提供多套更简洁的实现,输出结果均和原代码完全一致:"nif C(9); dni_check C(8)"
方案1:tidyverse生态精简写法
最短写法(purrr::imap)
直接将数据框作为列表遍历,imap可以同时获取列值和列名,省去多余的类型转换步骤:
library(tidyverse) imap_chr(df, ~ str_c(.y, " C(", max(str_length(.x)), ")")) %>% str_c(collapse = "; ")
可读性优先写法(glue+across)
用glue做字符串拼接,语法更直观,适合需要后续修改格式的场景:
df %>% summarise(across(everything(), ~ glue("{cur_column()} C({max(str_length(.x))})"))) %>% str_c(collapse = "; ")
方案2:无依赖基础R实现
无需安装加载任何第三方包,适合极简运行环境:
paste(mapply(function(col, col_name) paste0(col_name, " C(", max(nchar(col)), ")"), df, names(df)), collapse = "; ")
内容的提问来源于stack exchange,提问作者crestor
相关产品推荐
相关产品推荐

