如何在R中编写实现大小写字母互相转换的自定义函数
R语言大小写互转自定义函数实现方案
R本身自带tolower()、toupper()两个基础大小写转换函数,基于这两个函数封装即可实现大小写互转,下面提供两种常用实现思路:
方法1:逐字符判断转换(逻辑易懂,适合短文本)
逐个拆分字符串的单个字符,判断原有字符的大小写状态后反向转换,非英文字母的数字、符号、中文等内容保持不变:
case_swap <- function(input_str) { # 将输入字符串拆分为单个字符的向量 char_vec <- strsplit(input_str, "")[[1]] # 逐位判断转换:原本大写转小写,原本小写转大写 swapped_vec <- ifelse( char_vec == toupper(char_vec), tolower(char_vec), toupper(char_vec) ) # 把转换后的字符向量拼接回完整字符串 paste(swapped_vec, collapse = "") }
测试示例
- 输入
case_swap("HeLLo WoRLd 123!"),输出结果为hEllO wOrlD 123! - 输入
case_swap("R语言AbC@#"),输出结果为r语言aBc@#
方法2:正则替换实现(性能更高,适合长文本)
借助Perl正则的大小写替换语法,避免逐字符遍历,处理长文本时速度优势明显:
case_swap_fast <- function(input_str) { # 先给所有大写字母加临时标记后转小写,避免后续替换冲突 temp <- gsub("([A-Z])", "~\\L\\1", input_str, perl = TRUE) # 把剩余的原生小写字母转大写 temp <- gsub("([a-z])", "\\U\\1", temp, perl = TRUE) # 清除临时标记得到最终结果 gsub("~", "", temp, fixed = TRUE) }
注意:如果需要处理带重音的拉丁语系特殊字母,只需将正则的匹配范围替换为Unicode大小写字母区间即可,原有其他字符的保留规则不变。
内容的提问来源于stack exchange,提问作者jassiiccaa2020
相关产品推荐
相关产品推荐

