Well, probably I'm wrong. There are other ways than using paste(), such as sprintf() if you are a C user before.
Your 2nd question:
<br />
old.plus=get("+")<br />
"+.character"=function(x,y)paste(x,y,sep="")<br />
"+.numeric"=function(x,y)if(inherits(y,"character"))"+.character"(x,y) else old.plus(x,y)<br />
"+"=function(x,y)UseMethod("+")<br />
then:
<br />
> "a"+"b"<br />
[1] "ab"<br />
> "a"+2<br />
[1] "a2"<br />
> 33.3+"decimal"<br />
[1] "33.3decimal"<br />