The code seems ok. I created an contrived list_1 as an example, and I'm getting the right output. The only thing I would say is to make sure that the elements of names(genex) that you are trying to extract in fact do start with the text that you believe they start with (i.e., no spaces before the word and correct spelling and correct case, etc.).
> list_1 = c("kloxic", "opium", "trajectory", "opip", "tram")
> names_1 = list_1[startsWith(list_1, c("klox", "opiu", "traj") )]
> names_1
[1] "kloxic" "opium" "trajectory"
You can also try the code below:
grep(x = list_1, pattern = "^(klox|opiu|traj)", value = TRUE)
Hope that helps,
Snehal