jeudi 29 octobre 2020

R search a character vector using a pattern vector [duplicate]

I have been experimenting with grep to identify a pattern in a character vector with the aim of 'fishing out' the name of a file from the character vector. For example, for a small and simplified case, let's say:

vec <- c("Fast.file1", "Fast.file2", "Med.file3", "Medium.file4", "Slow.file5")

I can search for the files with the pattern "Fast" by simply writing:

> Fast_files <- vec[grep("Fast", vec)]
> Fast_files
[1] "Fast.file1" "Fast.file2"

But let's say I have a vector of patterns, whose length can vary depending on user input via a file read. I would like to feed the pattern vector to the search so that each element of the pattern can be cross-checked against vec, and I want to return all compatible hits. For example,

checkAgainst <- c("Fast", "Medium", "Med")

If I try to use grep with checkAgainst as a pattern, I get:

> find_files <- grep(checkAgainst, vec)
Warning message:
In grep(checkAgainst, vec) :
  argument 'pattern' has length > 1 and only the first element will be used
> find_files
[1] 1 2
> 

So, it appears grep can't take a vector pattern. It takes the first (i.e. "Fast").

My wish is to have an outcome where find_files includes "Fast.file1", "Fast.file2", "Med.file3" and "Medium.file4".

I can write a for-loop where I can overcome this problem, but I was wondering if R provided a more succinct and elegant solution?

Thank you for your consideration.

Maziar.

Aucun commentaire:

Enregistrer un commentaire