Неверное количество цифр в format.pval ()? - PullRequest
1 голос
/ 17 января 2020

При указании 3 цифр в format.pval() почему, скажем, 0.019950 выводит 4 цифры:

format.pval(0.019950, eps=.001, digits=3, nsmall=3)
"0.0199"

Но, скажем, 0.019951 выводит 3 цифры:

format.pval(0.019951, eps=.001, digits=3, nsmall=3)
"0.020"

Edit (Solution):

Решение с использованием 3 цифр при сохранении форматирования p , основанное на ответе dcarlson's, заключалось в простом округлении значения до 3 цифр. перед передачей на format.pval():

format.pval(round(0.019950, digits=3), eps=.001, digits=3, nsmall=3)
"0.020"

Ответы [ 2 ]

2 голосов
/ 17 января 2020

Чтобы ответить на ваш первый вопрос "почему, скажем, 0.019950 выводит 4 цифры" : с аргументом digits = 3 вы указываете, что хотите показать первые 3 значимые цифры после десятичной точки (которые 199). Из ?format.pval

цифр: сколько значащих цифр нужно использовать.

В ответ на ваш второй вопрос: 0.019951 с digits = 3 округляется первым на "0.02" (это можно проверить, посмотрев на вывод format.pval(0.019951, eps=.001, digits=3)). Затем, установив nsmall = 3, вы запрашиваете 3 цифры после десятичной точки, которая превращает "0.02" в "0.020".

1 голос
/ 17 января 2020

Аргумент digits= здесь и в других местах в R это ЗНАЧИТЕЛЬНЫЕ цифры, а не десятичные цифры. Значимые цифры игнорируют начальные 0 в десятичной дроби, поэтому первый ответ - 3 значащих цифры, поскольку вы не учитываете 0 после десятичной запятой. Во втором примере ответ округляется до .02, но nsmall = 3 приводит к дополнительному завершающему 0.

Кроме того, указание аргумента digits= в R обычно рассматривается как рекомендательный, поэтому его нельзя последовало. Вы всегда можете заставить R печатать количество десятичных знаков, используя round или функцию форматирования sprintf.

format.pval(round(0.019950, 3), digits=3, nsmall=3)
# [1] "0.020"
sprintf("%.3f", .019950)
# [1] "0.020"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...