Вы можете просто запустить grep()
в исходном списке
matches <- grep("b",alist)
Затем выполнить пересечение с вашим индексным вектором
intersect(matches, c(2,3,4))
Таким образом, вы получите индекс в оригинальномсписок, но только те элементы, которые также включены в подсписок.
Конечно, вы можете сделать все это вместе в одну строку
intersect(grep("b",alist), c(2,3,4))
И это начинает выглядеть очень похоже на вашоригинальное grep()
утверждение в вопросе.