starałem się zwinąć wszystkie wielokrotności (2 lub więcej) białe znaki wewnątrz elementów wektora w jeden, stosując gsub()
, np:R regex: problemy z wektorami znaków zawierających NAS
x1 <- c(" abc", "a b c ", "a b c")
gsub("\\s{2,}", " ", x1)
[1] " abc" "a b c " "a b c"
Ale jako wkrótce jako wektor zawiera NA
substytucja nie:
x2 <- c(NA, " abc", "a b c ", "a b c")
gsub("\\s{2,}", " ", x2)
[1] NA " " " " " "
jednak to działa dobrze, jeśli ktoś używa Perl podobny wyrażeń regularnych:
gsub("\\s{2,}", " ", x2, perl = TRUE)
[1] NA " abc" "a b c " "a b c"
Czy ktoś ma sugestie, dlaczego własne wyrażenia regularne R zachowują się w ten sposób? Używam R 3.1.1 na Linux x86-64, jeśli to pomaga.
Czy sprawdziłeś, czy dodano więcej tylnych ukośników? W R jest to dość trudne. Zazwyczaj potrzebujesz trzech, aby rozpoznać tego rodzaju wyrażenia. – Llopis
@Llopis To jest nieprawidłowe. Regex jest w rzeczywistości '\ s', do którego dołączamy pojedynczy ukośnik odwrotny, aby dojść do' \\ s'. – jbaums
Potwierdzono także w systemie OS X. Zarówno '\ s' jak i' [[: space:]] 'wykazują zachowanie, podczas gdy literalny znak spacji (lub klasa znaków spacji/tabulacji) działa dobrze. Myślę, że błąd w R. –