简体   繁体   中英

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.

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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM