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.12345como 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, ?formatCe ?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. ggplot2tem uma função, percentmas 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 sprintfregras 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.
sprintfparece 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?