делать последнюю букву отдельного слова заглавной - PullRequest
1 голос
/ 04 августа 2020

В R пытается написать функцию, которая принимает слово MarsuPial и приводит к marsupiaL.

текущий код

mycap <- function(mystr = "") {
  mystr <- tolower(mystr)
  a <- substr(mystr, 1, 1)
  b <- substr(mystr, 2, nchar(mystr))
  paste(tolower(a), b, sep = "")
}

Ответы [ 3 ]

0 голосов
/ 04 августа 2020
mycap <- function(mystr = "") {
  # a: the string without the last character
  a <- substr(mystr, 1, nchar(mystr)-1)

  # b: only the last character 
  b <- substr(mystr, nchar(mystr), nchar(mystr))

  # lower(a) and upper(b)
  paste(tolower(a), toupper(b), sep = "")
}

Например:

mycap("MarsuPial")
[1] "marsupiaL
0 голосов
/ 04 августа 2020

Другой вариант предотвращения подмножества / разделения строки - преобразовать строку в целочисленный вектор, чтобы изменить порядок, чтобы мы могли использовать stringr::str_to_title.

library(stringr)
library(dplyr)
mycap <- function(mystr = "") {
    mystr %>% utf8ToInt %>% rev %>% intToUtf8 %>% str_to_title %>% utf8ToInt %>% rev %>% intToUtf8
}

mycap("MarsuPial")
#[1] "marsupiaL"
mycap("dummy")
#[1] "dummY"

Или другой быстрый вариант - использовать stringi::stri_reverse и stringi::stri_trans_totitle

library(stringi)
mycap <- function(mystr = "") stri_reverse(stri_trans_totitle(stri_reverse(mystr)))
0 голосов
/ 04 августа 2020

Вы можете использовать substr<-, чтобы использовать последний символ с заглавной буквы.

mycap <- function(mystr = "") {
  mystr <- tolower(mystr)
  n <- nchar(mystr)
  substr(mystr, n, n) <- toupper(substr(mystr, n, n))
  return(mystr)
}

mycap('MarsuPial')
#[1] "marsupiaL"
mycap('dummy')
#[1] "dummY"
...