Uma das coisas que costumava me deixar perplexo como um novato em R era como formatar um número como uma porcentagem para impressão.
Por exemplo, exiba 0.12345
como 12.345%
. Eu tenho várias soluções alternativas para isso, mas nenhuma delas parece ser "newby friendly". Por exemplo:
set.seed(1)
m <- runif(5)
paste(round(100*m, 2), "%", sep="")
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
sprintf("%1.2f%%", 100*m)
[1] "26.55%" "37.21%" "57.29%" "90.82%" "20.17%"
Pergunta: Existe uma função R básica para fazer isso? Como alternativa, existe um pacote amplamente usado que fornece um invólucro conveniente?
Apesar de procurar algo assim em ?format
, ?formatC
e ?prettyNum
, ainda não encontrei um invólucro adequadamente conveniente na base R. ??"percent"
não produziu nada de útil. library(sos); findFn("format percent")
retorna 1250 hits - mais uma vez não é útil. ggplot2
tem uma função, percent
mas isso não dá controle sobre a precisão do arredondamento.
sprintf
é perfeitamente adequado para esse subconjunto de codificadores R que também são programadores. Eu codifiquei muito na minha vida, incluindo COBOL (arrepio) e fortran (mostra minha idade). Mas não considero as sprintf
regras de formatação óbvias (tradução: WTF?). E, claro, um invólucro dedicado deve ser mais fácil de chamar do que sprintf, por exemplo:format_percent(x=0.12345, digits=2)
sprintf()
dificilmente é mais demorado do que descobrir que pacote foo contém format_percent()
. O que acontece se o usuário não quiser formatar como porcentagem, mas outra coisa semelhante? Eles precisam encontrar outro invólucro. A longo prazo, o aprendizado das ferramentas básicas será benéfico.
%
é o caractere de comentário no LaTeX, que é o formato de relatório "padrão" para R. Portanto, embora possa ser útil para rotular gráficos, é preciso ter cuidado para que o número formatado seja Sweaved.
sprintf
parece ser a solução favorita nas listas de discussão e não vi nenhuma solução melhor. Qualquer função embutida não será muito mais simples de chamar, certo?