2015-05-01 3 views
1

«Мой» capitalize работает нормально? Вот тестовый пример из inside-r.org с их результата в комментарии:R: используется для правильной работы

library(Hmisc) 
words <- strsplit("Hello wOrld", " ")[[1]]; 
cat(paste(toupper(words), collapse=" "), "\n")  # "HELLO WORLD" 
cat(paste(tolower(words), collapse=" "), "\n")  # "hello world" 
cat(paste(capitalize(words), collapse=" "), "\n") # "Hello WOrld" 

И вот что я получаю:

HELLO WORLD 
hello world 
Hello wOrld #WRONG!!! 

Другой тест:

> capitalize(c("Hello world", "hello world", "hello World")) 
[1] "Hello world" "Hello world" "hello World" 

Случай 3 снова неверно. То есть если capitalize в моем случае видит заглавную букву в любом месте строки, она не работает должным образом. Есть идеи?

Обновление. Проблема решена с R.utils

library(R.utils) 
capitalize(c("Hello world", "hello world", "hello World", "test cAse")) 
[1] "Hello world" "Hello world" "Hello World" "Test cAse" 
+1

Где именно вы получаете эту функцию с «капитализацией»? Вы писали это? Если да, покажите код. В противном случае я точно не знаю, что вы здесь задаете. – MrFlick

+0

@MrFlick Ah! Спасибо за комментарий. это от 'Hmisc' .. отредактировано –

+1

Что именно вы пытаетесь достичь? Просто капитализация первой буквы в строке? –

ответ

1

Я не уверен, что вы после, но это моя трещина в том, что я думаю, что вам нужно. возможно, лучше описать вашу цель или предоставить желаемый результат. Вот регулярное выражение для того, чтобы использовать только первую букву первого слова, а также использовать каждое слово «первая буква»:

x <- c("Hello world", "hello world", "hello World", "test cAse") 

sub("(\\w)(\\w*)", "\\U\\1\\E\\2", x, perl=TRUE) 
## [1] "Hello world" "Hello world" "Hello World" "Test cAse" 

gsub("(\\w)(\\w*)", "\\U\\1\\E\\2", x, perl=TRUE) 
## [1] "Hello World" "Hello World" "Hello World" "Test CAse" 
+0

Спасибо! Мне нравится этот подход, поскольку ему не нужен дополнительный пакет. Я действительно собирался писать первую букву только в строке, но для меня также полезно использовать каждое слово. Принято. –

2

Вы должны использовать более низкие строки случая для capitalize работать. Простым решением является использование tolower в дополнение к capitalize.

capitalize(tolower(c("Hello world", "hello world", "hello World"))) 
## [1] "Hello world" "Hello world" "Hello world" 
+0

Проблема решена с использованием пакета 'R.utils' вместо' Hmisc':> 'capize (c (« Hello world »,« hello world »,« hello World »,« test cAse »)) [1 ] «Hello world» «Hello world» «Hello world» «Test cAse» ' –

+0

@AlexeyFerapontov вы подходите мне:« Привет мир »« Привет, мир »« hello World »« test cAse »(см. Третий и четвертые элементы отличаются). –

+0

Вы пытались с 'R.utils'? –

Смежные вопросы