给定字符串:
words <- c("fauuucet water", "tap water")
我想将toupper
函数应用于包含 u
的所有字词。
res <- c("FAUUCET water", "tap water")
change_u_case <- function(str) {
sapply(
X = str,
FUN = function(search_term) {
sapply(
X = strsplit(search_term, split = "\\s", perl = TRUE),
FUN = function(word) {
if (grepl(pattern = "u", x = word)) {
toupper(word)
}
}
,
USE.NAMES = FALSE
)
},
USE.NAMES = FALSE
)
}
change_u_case(words) -> tst_res
words
tst_res
unlist(tst_res)
rapply
次调用的解决方案是否可以构建rlist::list.iter
方法也很有意思答案 0 :(得分:2)
您可以使用单个sapply
电话,即
sapply(strsplit(words, ' '), function(i) {i1 <- grepl('u', i);
i[i1] <- toupper(i[i1]);
paste0(i, collapse = ' ')
})
#[1] "FAUUUCET water" "tap water"
答案 1 :(得分:1)
以下是基于stringi
的解决方案:
library(stringi);
sapply(stri_extract_all_words(words),
function(w) paste(ifelse(stri_detect(w, regex = "u"), toupper(w), w), collapse = " "))
#[1] "FAUUUCET water" "tap water"
答案 2 :(得分:1)
尝试stringr
:
str_replace_all(words, '\\w*u\\w*', toupper)
# [1] "FAUUUCET water" "tap water"
更多例子:
str_replace_all(c('Upset', 'day day up'), '\\w*u\\w*', toupper)
# [1] "Upset" "day day UP"