Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The startsWith
function comes with base R, and determines whether entries of an input start with a given prefix. (The endsWith
function does the same thing but for suffixes.) The following code checks if each of “ant”, “banana” and “balloon” starts with “a”:
startsWith(c("ant", "banana", "balloon"), "a") # [1] TRUE FALSE FALSE
The second argument (the prefix to check) can also be a vector. The code below checks if “ant” starts with “a” and if “ant” starts with “b”:
startsWith("ant", c("a", "b")) # [1] TRUE FALSE
Where things might get a bit unintuitive is when both arguments are vectors of length >1. Why do you think the line of code below returned the result it did?
startsWith(c("ant", "banana", "balloon"), c("a", "b")) # [1] TRUE TRUE FALSE
This makes sense when we look at the documentation for startsWith
‘s return value:
A logical vector, of “common length” of x and prefix (or suffix), i.e., of the longer of the two lengths unless one of them is zero when the result is also of zero length. A shorter input is recycled to the output length.
startsWith(x, prefix)
checks if x[i]
starts with prefix[i]
for each i
. In our line of code above, the function checks if “ant” starts with “a” and “banana” starts with “b”. Since x
had length greater than prefix
, we “recycle” prefix
and check if “balloon” starts with “a”.
If you want to check if each x[i]
starts with any prefix[j]
(with j
possibly being different from i
), we could do the following:
x <- c("ant", "banana", "balloon") prefix <- c("a", "b") has_prefix <- sapply(prefix, function(p) startsWith(x, p)) has_prefix # a b # [1,] TRUE FALSE # [2,] FALSE TRUE # [3,] FALSE TRUE apply(has_prefix, 1, any) # [1] TRUE TRUE TRUE
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.