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 回答