我的函数必须将给定字符串中的所有大写字母转换为小写字母,反之亦然.我曾经用循环来解决这些问题.所以,我的代码是:
mirror_case <- function(x){
for(i in x){
ifelse(i==toupper(i),x <-
str_replace_all(x,i,tolower(i)),
ifelse(i==tolower(i),x <-
str_replace_all(x,i,toupper(i)),
x <- gsub(i,i,x)))}
return(x)}
Run Code Online (Sandbox Code Playgroud)
我在几个字符串上检查了这个.有时它有效,有时则无效.
> d
[1] "LKJLjlei 33"
> mirror_case(d)
[1] "LKJLjlei 33"
> e
[1] "asddf"
> mirror_case(e)
[1] "ASDDF"
> f
[1] "ASDDF"
> mirror_case(f)
[1] "asddf"
Run Code Online (Sandbox Code Playgroud)
那么,这个功能有什么问题?我不仅希望得到答案,而且还想要解释一下这个问题的一些解释,而不是回到这里与类似的问题.
R中的字符串不是像python中那样的序列,不能像这样在for循环中遍历.您应该首先将字符串分解为单个字符.试试这个:
mirror_case <- function(s) {
# break to characters
chars <- strsplit(s, '')
# apply your ifelse statement to all characters
mirror_chars <- sapply(chars, function(i)
ifelse(toupper(i) == i, tolower(i), toupper(i)))
# join back to a string
mirror_s <- paste(mirror_chars, collapse = "")
return(mirror_s)
}
mirror_case("LKJLjlei 33")
# [1] "lkjlJLEI 33"
Run Code Online (Sandbox Code Playgroud)