Não ficou claro porque você não pode usar o gsub(). Eu tentei mudando o locale e deu certo para mim. Veja:

x <- sprintf("Matricula: %s \n Peso: %2.2f", '123.4', 47.5)
x

## Qualquer ponto por vírgula.
gsub("\\.", ",", x)

## Ponto entre números por vírgula.
gsub("(\\d)\\.(\\d)", "\\1,\\2", x)

## Sys.getlocale()
Sys.setlocale("LC_NUMERIC","pt_BR.utf8")
sprintf("Matricula: %s \n Peso: %2.2f", '123.4', 47.5)

​À disposição.
Walmes.​