The minimum problem is that the inline code has to look back to find it's word argument. If you're willing to compose as
This `r colorize("rose")`
you could modify colorize with
redwords <- c("red", "rose", "flag", "t-shirt", "rock", "crayon", "dye","phone", "line", "button")
if(x %in% redwords)
\dots
But that's almost as much trouble. If it's worth the trouble, you do this with a system call to filter the Rmd file through sed or another program or even run knit from the console with a flag to filter the stdin through a Lua or Haskell filter. I've done the latter for a LaTeX document that required some fancier table formatting than I was able to get otherwise, but I don't recommend it unless fluency in Haskell is in the toolkit.
Here's an example of what I ended up with in flex/bison
/* NB: OSX, cannot link to -lfl, use -ll */
/* can':t have internal comments */
%{
%}
%%
\" { printf("") ; }
^%.*$ { printf("") ; }
^.%.*$ { printf("") ; }
"{rrrrr}" { printf("{lrrrr}") ;
printf("\n") ; }
" \\midrule" { printf("Cause of Death & \\%% & \\%% & \\%% & \\%% \\\\");
printf("\n") ;
printf(" \\midrule") ;
printf("\n") ; }
"& 0.00" { printf("& . ") ; }
%%
int main()
{
yylex();
}