Eu tenho um número, por exemplo, 1.128347132904321674821 que gostaria de mostrar como apenas duas casas decimais quando a saída é exibida na tela (ou gravada em um arquivo). Como é que alguém faz isso?
x <- 1.128347132904321674821
EDITAR:
O uso de:
options(digits=2)
Foi sugerido como uma resposta possível. Existe uma maneira de especificar isso em um script para uso único? Quando o adiciono ao meu script, parece não fazer nada diferente e não estou interessado em re-digitar muito para formatar cada número (estou automatizando um relatório muito grande).
-
Resposta: arredondado (x, dígitos = 2)
r
formatting
rounding
r-faq
Brandon Bertelsen
fonte
fonte
controls the number of digits to print when printing numeric values. It is a suggestion only. Valid values are 1...22 with default 7. See the note in print.default about values greater than 15.
das opções? afeta apenas a saída.round(23, digits=2)
será impresso23
e não23.00
. Se você quiser o último, tente stackoverflow.com/a/12135122/180892Respostas:
Antecedentes: Algumas respostas sugeridas nesta página (por exemplo,
signif
,options(digits=...)
) não garantem que um certo número de casas decimais são exibidos para um número arbitrário. Presumo que este seja um recurso de design em R, no qual boas práticas científicas envolvem mostrar um certo número de dígitos com base em princípios de " figuras significativas ". No entanto, em muitos domínios (por exemplo, estilo APA , relatórios comerciais), os requisitos de formatação determinam que um determinado número de casas decimais seja exibido. Isso geralmente é feito para fins de consistência e padronização, em vez de se preocupar com números significativos.Solução :
O código a seguir mostra exatamente duas casas decimais para o número
x
.Por exemplo:
Uma função mais geral é a seguinte, onde
x
está o número ek
o número de casas decimais a serem exibidas.trimws
remove qualquer espaço em branco inicial que possa ser útil se você tiver um vetor de números.Por exemplo,
fonte
0.0001
como #0.00
format()
eprettyNum()
transformam números em caracteres. Como você abordaria isso?format(c(10, 1), nsmall=1)
yields"10.0" " 1.0"
(observe o espaço à frente do 1.0. Considerando que, asprintf()
função parece garantir uma melhor formatação no ambos os lados do decimal, por exemplo,sprintf(c(10,1), fmt = '%#.1f')
se livrar desse espaço levando traquinas e volta"10.0" "1.0"
.format
é usado em uma coluna.Você pode formatar um número, digamos
x
, com casas decimais conforme desejar. Aquix
está um número com muitas casas decimais. Suponha que desejamos mostrar até 8 casas decimais deste número:Aqui, os
format="f"
números flutuantes nas casas decimais habituais dizem xxx.xxx edigits
especifica o número de dígitos. Por outro lado, se você quisesse exibir um número inteiro, usariaformat="d"
(muito parecidosprintf
).fonte
formatC
é quase exclusivamente o que uso para esse fim. Eu acho que essa resposta é boa e está na base R de acordo com a solicitação do OP.Você pode tentar o meu pacote formatável .
O bom
x
é que ainda é um vetor numérico e você pode fazer mais cálculos com a mesma formatação.Melhor ainda, os dígitos não são perdidos, você pode reformatar com mais dígitos a qualquer momento :)
fonte
por 2 casas decimais, supondo que você queira manter zeros à direita
que dá
Como o @mpag menciona abaixo, parece que o R às vezes pode fornecer valores inesperados com isso e o método round, por exemplo, sprintf (5.5550, fmt = '% #. 2f') fornece 5,55, e não 5,56
fonte
Algo parecido :
Definição da opção de dígitos:
fonte
digits
opção não parece definir o número de dígitos após o decimal. Por exemplo, quando eu defino opções (dígitos = 2), a impressão de 7,25 resulta na saída de 7.2, 1234.25 torna-se 1234 e 0,25 permanece 0,25. Existe outra opção interagindo com isso?Verificar funções prettyNum, formato
ter zeros de teste (123.1240 por exemplo) use
sprintf(x, fmt='%#.4g')
fonte
sprintf
, é basicamente uma estrutura para formataçãofmt
argumento, desculpe!g
sua resposta é para dígitos fixos, usandof
funciona melhor.Se você preferir dígitos significativos a dígitos fixos, o comando signif pode ser útil:
fonte
Error: could not find function "fixed"
signif
funciona para o número específico fornecido, mas presumo que o problema comum aplicado seja quando você precisa mostrar exatamente duas casas decimais, mas não sabe qual é o número antecipado. Nesse caso,signif
fornecerá números diferentes de decimais, dependendo do número real.A função
formatC()
pode ser usada para formatar um número com duas casas decimais. Duas casas decimais são fornecidas por essa função, mesmo quando os valores resultantes incluem zeros à direita.fonte
Estou usando esta variante para forçar a impressão de casas decimais K:
fonte
Observe que objetos numéricos em R são armazenados com precisão dupla , o que fornece (aproximadamente) 16 dígitos decimais de precisão - o restante será ruído. Concordo que o número mostrado acima provavelmente seja apenas um exemplo, mas tem 22 dígitos.
fonte
Parece-me que seria algo como
Por uma pequena ajuda online .
fonte
format.default(x, digits = 2)
apenas um tiro no escuro, com base no link fornecido. Essas informações são algumas das que faltam no que normalmente leio na documentação, esperava ver também as impressões.se você quiser arredondar um número ou uma lista, basta usar
Em seguida, os dados serão arredondados para duas casas decimais.
fonte