1515# ' matrix to `start`.
1616# '
1717# ' Negative values count backwards from the last character.
18+ # ' @param omit_na Single logical value. If `TRUE`, missing values in any of the
19+ # ' arguments provided will result in an unchanged input.
1820# ' @param value replacement string
1921# ' @return A character vector of substring from `start` to `end`
2022# ' (inclusive). Will be length of longest input argument.
5052# ' str_sub(x, -1, -1) <- "K"; x
5153# ' str_sub(x, -2, -2) <- "GHIJ"; x
5254# ' str_sub(x, 2, -2) <- ""; x
55+ # '
56+ # ' # If you want to keep the original if some argument is NA,
57+ # ' # use omit_na = TRUE
58+ # ' x1 <- x2 <- x3 <- x4 <- "AAA"
59+ # ' str_sub(x1, 1, NA) <- "B"
60+ # ' str_sub(x2, 1, 2) <- NA
61+ # ' str_sub(x3, 1, NA, omit_na = TRUE) <- "B"
62+ # ' str_sub(x4, 1, 2, omit_na = TRUE) <- NA
63+ # ' x1; x2; x3; x4
5364str_sub <- function (string , start = 1L , end = - 1L ) {
5465 if (is.matrix(start )) {
5566 stri_sub(string , from = start )
@@ -61,11 +72,11 @@ str_sub <- function(string, start = 1L, end = -1L) {
6172
6273# ' @export
6374# ' @rdname str_sub
64- " str_sub<-" <- function (string , start = 1L , end = - 1L , value ) {
75+ " str_sub<-" <- function (string , start = 1L , end = - 1L , omit_na = FALSE , value ) {
6576 if (is.matrix(start )) {
66- stri_sub(string , from = start ) <- value
77+ stri_sub(string , from = start , omit_na = omit_na ) <- value
6778 } else {
68- stri_sub(string , from = start , to = end ) <- value
79+ stri_sub(string , from = start , to = end , omit_na = omit_na ) <- value
6980 }
7081 string
7182}
0 commit comments