I have two vectors of different lengths, and I would like to apply a function to every possible combination of the two vectors, resulting in a matrix.
In my particular example, the two vectors are charactor vectors, and I would like to apply the function grepl
, ie:
names <- c('cats', 'dogs', 'frogs', 'bats')
slices <- c('ca', 'at', 'ts', 'do', 'og', 'gs', 'fr', 'ro', 'ba')
results <- someFunction(grepl, names, slices)
results
ca at ts do og gs fr ro ba
cats TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
dogs FALSE FALSE FALSE TRUE TRUE TRUE FALSE FALSE FALSE
frogs FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE FALSE
bats FALSE TRUE TRUE FALSE FALSE FALSE FALSE FALSE TRUE
Right now I am using for loops
but I am sure there is a better and more efficient way. I have done a lot of research on the apply functions
, as well as aggregate
, by
, sweep
, etc, but haven't found what I am looking for.
Thanks for the help.
Try this
library(stringr)
t(sapply(names,str_detect,pattern=slices))
You can also do this in base R using grepl
sapply(slices, grepl, names)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With