Alternatif lain adalah menggunakan sub-ekspresi menangkap dengan fungsi ekspresi reguler regmatchesdan regexec.
# the original example
x <- 'hello stackoverflow'
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', x))
Ini mengembalikan seluruh string, karakter pertama, dan hasil "muncul" dalam daftar panjang 1.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
yang setara dengan list(c(x, substr(x, 1, 1), substr(x, 2, nchar(x)))). Artinya, ini berisi himpunan super dari elemen yang diinginkan serta string lengkap.
Menambahkan sapplyakan memungkinkan metode ini berfungsi untuk vektor karakter dengan panjang> 1.
# a slightly more interesting example
xx <- c('hello stackoverflow', 'right back', 'at yah')
# grab the substrings
myStrings <- regmatches(x, regexec('(^.)(.*)', xx))
Ini mengembalikan daftar dengan string lengkap yang cocok sebagai elemen pertama dan subekspresi yang cocok ditangkap ()sebagai elemen berikut. Jadi dalam ekspresi reguler '(^.)(.*)', (^.)cocokkan karakter pertama dan (.*)cocok dengan karakter yang tersisa.
myStrings
[[1]]
[1] "hello stackoverflow" "h" "ello stackoverflow"
[[2]]
[1] "right back" "r" "ight back"
[[3]]
[1] "at yah" "a" "t yah"
Sekarang, kita dapat menggunakan metode sapply+ terpercaya [untuk menarik substring yang diinginkan.
myFirstStrings <- sapply(myStrings, "[", 2)
myFirstStrings
[1] "h" "r" "a"
mySecondStrings <- sapply(myStrings, "[", 3)
mySecondStrings
[1] "ello stackoverflow" "ight back" "t yah"