Amadou Kone Amadou Kone - 3 months ago 11
R Question

Apply function over two vectors of different lengths, and return a matrix in R

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.

Answer

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)
Comments