Un'altra alternativa è usare l'acquisizione di sottoespressioni con le funzioni delle espressioni regolari regmatches
e regexec
.
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
Questo restituisce l'intera stringa, il primo carattere e il risultato "saltato" in un elenco di lunghezza 1.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
che è equivalente a list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x))))
. Cioè, contiene il super set degli elementi desiderati e la stringa completa.
L'aggiunta sapply
consentirà a questo metodo di funzionare per un vettore di caratteri di lunghezza> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
Ciò restituisce un elenco con la stringa completa corrispondente come primo elemento e le sottoespressioni corrispondenti catturate da ()
come i seguenti elementi. Quindi '(^.)(.*)'
, nell'espressione regolare , (^.)
corrisponde al primo carattere e (.*)
corrisponde ai caratteri rimanenti.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
Ora possiamo usare il fidato sapply
+ [
metodo per estrarre le sottostringhe desiderate.
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"