如何修复R代码以提取句子中最长的偶长度单词?
修复后的代码及解释
原代码存在逻辑混乱、函数使用错误的问题:
- 仅获取了偶长度单词的索引,未提取对应单词,也未处理长度排序
word函数使用场景错误,嵌套lapply逻辑混乱导致报错
以下是符合需求的修复代码:
library(dplyr) library(purrr) library(stringr) string <- data.frame(string=c('R is a popular programming language', 'python is good')) %>% mutate(string2 = map_chr(string, function(sentence) { # 将句子分割为单词向量 words <- str_split(sentence, "\\s+")[[1]] # 筛选出长度为偶数的单词 even_words <- words[str_length(words) %% 2 == 0] # 处理无偶长度单词的情况(可选,返回NA) if (length(even_words) == 0) return(NA_character_) # 找出最长的偶长度单词,若多个长度相同取第一个 max_length <- max(str_length(even_words)) even_words[str_length(even_words) == max_length][1] }))
代码说明:
- 使用
str_split分割句子为单词,\\s+匹配任意数量空白符(避免多个空格的情况) - 通过
str_length(words) %% 2 == 0筛选偶长度单词 - 计算偶长度单词的最大长度,提取对应单词;若有多个同长单词,取第一个
map_chr确保返回字符向量,直接生成string2列
运行后输出与预期一致:
string string2 1 R is a popular programming language language 2 python is good python
内容的提问来源于stack exchange,提问作者jkatam
相关产品推荐
相关产品推荐

