Как отформатировать число с указанным уровнем точности? - PullRequest
5 голосов
/ 08 марта 2011

Я хотел бы создать функцию, которая возвращает вектор чисел с точностью, отраженной наличием только n значащих цифр, но без конечных нулей, а не в научной нотации

например, я бы хотел

somenumbers <- c(0.000001234567, 1234567.89)
myformat(x = somenumbers, n = 3)

чтобы вернуть

[1] 0.00000123  1230000

Я играл с format, formatC и sprintf, но они не хотят работать с каждым числом независимо, и они возвращают числа в виде символьных строк (в кавычках).

Это самый близкий пример, который я получил:

> format(signif(somenumbers,4), scientific=FALSE)
[1] "      0.000001235" "1235000.000000000"

Ответы [ 3 ]

7 голосов
/ 08 марта 2011

Вы можете использовать функцию signif для округления до заданного числа значащих цифр.Если вам не нужны дополнительные конечные 0, не печатайте результаты, а делайте с ними что-то еще.

> somenumbers <- c(0.000001234567, 1234567.89) 
> options(scipen=5)
> cat(signif(somenumbers,3),'\n')
0.00000123 1230000 
> 
5 голосов
/ 08 марта 2011

sprintf, кажется, делает это:

sprintf(c("%1.8f", "%1.0f"), signif(somenumbers, 3))
[1] "0.00000123" "1230000"
1 голос
/ 08 марта 2011

как насчет

myformat <- function(x, n) {
    noquote(sapply(a,function(x) format(signif(x,2), scientific=FALSE)))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...