Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 877
Amadou Kone Avatar asked Aug 13 '16 17:08

Amadou Kone


1 Answers

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)
like image 53
user2100721 Avatar answered Oct 18 '22 16:10

user2100721