Un'altra alternativa è quella di utilizzare la cattura sottoespressioni con le funzioni normali di espressione regmatches
e regexec
.
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
Ciò restituisce l'intera stringa, il primo carattere, e il risultato "spuntato" in una lista 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.
calcolata sapply
permetterà questo metodo di operare per un carattere vettore di lunghezza> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
Questo restituisce una lista con la stringa corrispondente come primo elemento e le sottoespressioni corrispondenti catturati dalle ()
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, siamo in grado di utilizzare il metodo di fidato sapply
+ [
per tirare fuori le sottostringhe desiderati.
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"
Questo è un trucco molto bello ma penso che manchi la domanda. – pedrosaurio
Sarà necessario spiegare ulteriormente poiché può produrre lo stesso risultato delle altre risposte. Vedi l'ultimo blocco di codice che usa 'sapply' per l'estrazione. "scoppiare" il primo carattere, come specificato nella domanda, è una questione di ripetere questo processo sul vettore risultante (mySecondStrings). – lmo
Certo, funziona con la spiegazione aggiuntiva che hai appena aggiunto, ma la trovo ancora più complessa di quanto dovrebbe. – pedrosaurio