4

基本インストール関数を使用して、テキスト文字列のベクトルの最初の文字を大文字にする最速の方法は何ですか?

私は以下の解決策を提供しましたが、それは非常に非効率的なアプローチのようです (部分文字列を使用してすべて一緒に貼り付けます)。私が考えていない正規表現の解決策があると思います。

いくつかの回答が得られたら、それらをベンチマークし、マイクロベンチマークを使用して最速のソリューションを報告します。

よろしくお願いいたします。

x <- c("i like chicken.", "mmh so good", NA)
#desired output
[1] "I like chicken." "Mmh so good"     NA  
4

4 に答える 4

5

間に合わなかったが、これはかなり速いに違いない

capitalize <- function(string) {
    #substring(string, 1, 1) <- toupper(substring(string, 1, 1))
    substr(string, 1, 1) <- toupper(substr(string, 1, 1))
    string
}
capitalize(x)
#[1] "I like chicken." "Mmh so good"     NA 
于 2012-06-19T02:22:14.333 に答える
4

これが最も遅いと思いますが、他のソリューションと競合させてください。

capitalize<-function(string) {
   sub("^(.)","\\U\\1", string, perl=TRUE )
}  

x <- c("i like chicken.", "mmh so good", NA)
capitalize(x)

編集:実際にはideoneでは部分文字列よりも高速です

編集 2: 小文字の一致はわずかに遅くなります:

sub("^(\\p{Ll})","\\U\\1", string, perl=TRUE)
于 2012-06-19T02:34:35.153 に答える
3

Hmiscパッケージには次の関数が含まれていますcapitalize

> require(Hmisc)
> capitalize(c("i like chicken.", "mmh so good", NA))
[1] "I like chicken." "Mmh so good"     NA

(ただし、これは正規表現バージョンと正規表現バージョンの両方よりも遅いようsubstringです。)

于 2012-06-19T03:05:48.867 に答える
1

部分文字列を使用した私のソリューション:

capitalize <- function(string) {
    cap <-  function(x) {
        if (is.na(x)) {
            NA
        }
        else {
            nc <- nchar(x)
            paste0(toupper(substr(x, 1, 1)), substr(x, 
              2, nc))
        }
    }
    sapply(string, cap, USE.NAMES = FALSE) 
}

x <- c("i like chicken.", "mmh so good", NA)
capitalize(x)
于 2012-06-19T02:09:10.437 に答える