Cercavo di comprimere tutti multiple (2 o più) caratteri di spaziatura all'interno di elementi di un vettore in una singola, utilizzando gsub()
, ad esempio:R regex: problemi con vettori caratteri contenenti AN
x1 <- c(" abc", "a b c ", "a b c")
gsub("\\s{2,}", " ", x1)
[1] " abc" "a b c " "a b c"
Ma non appena il vettore contiene NA
la sostituzione fallisce:
x2 <- c(NA, " abc", "a b c ", "a b c")
gsub("\\s{2,}", " ", x2)
[1] NA " " " " " "
Tuttavia, funziona bene se si usa Perl-come le espressioni regolari:
gsub("\\s{2,}", " ", x2, perl = TRUE)
[1] NA " abc" "a b c " "a b c"
Qualcuno ha suggerimenti sul perché le proprie espressioni regolari di R si comportano in questo modo? Sto usando R 3.1.1 su Linux x86-64 se questo aiuta.
Hai controllato l'aggiunta più indietro barre? In R è piuttosto difficile. Di solito hai bisogno di tre per riconoscere questo tipo di espressioni – Llopis
@Llopis Che non è corretto. La regex è in realtà '\ s', a cui anteponiamo un singolo backslash per arrivare a \\\ s'. – jbaums
Confermato anche su OS X. Sia '\ s' che' [[: space:]] 'mostrano il comportamento, mentre un carattere di spazio letterale (o classe di caratteri space/tab) funziona bene. Sto pensando bug in R. –