Использование format.pval в R (и с \ Sexpr в Sweave) - PullRequest
1 голос
/ 09 декабря 2011

Я прочитал файл справки для format.pval, и мне было интересно, если это правильный инструмент для вывода чисел в правильном формате, насколько значимые цифры

В этом посте:

R / Sweave форматирование чисел с \ Sexpr {} в научной нотации

было предложено решение, и мне интересно, есть ли здесь функция format.pval для этого.

И я думаю, что мы можем просто использовать его в Sweave как \Sexpr{format.pval(a value/variable here)} вместе с опциями для количества значащих цифр.

Большое спасибо ...

Ответы [ 4 ]

3 голосов
/ 09 декабря 2011

Я включил эту функциональность в пакет knitr, что делает теперь knitr действительно умным - он автоматически использует $a \times 10^b$, если ваш \Sexpr{} выдает число, и он слишком большой или слишком маленький (есливы выводите HTML вместо TeX, он автоматически использует a &times; 10<sup>b</sup>).Возможно, вы можете начать переключаться с Sweave на knitr сейчас: http://yihui.github.com/knitr/

1 голос
/ 14 июня 2017

Я думаю format.pval, вероятно, не следует использовать. Мы (статистики) обычно не используем общепринятые научные обозначения для $ p $ -значений, потому что ведущие нули также являются отражением точности. Таким образом мы используем общие цифры. Вы найдете это в большинстве научных публикаций.

Например, указание трех цифр означает, что «следовые» значения сообщаются с «<0,001», поскольку с наивысшей точностью обеспечивается тысячное место. Если я укажу <code>digits=3 и eps=0.001, то р-значение 0,0040523 сообщается как 0,00405, что говорит о моей точности до ста тысяч, когда 0,004 было бы желательно.

Я использую следующую маленькую обертку:

format.p <- function(p, precision=0.001) {
  digits <- -log(precision, base=10)
  p <- formatC(p, format='f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] <- paste0('<', precision)
  p
}
1 голос
/ 09 декабря 2011

format.pval специально разработан для форматирования напечатанных значений p.values, например, при просмотре вывода lm.

Рабочая лошадка для format.pval - это format, которая имеет более общее назначение. Поэтому вам, вероятно, следует использовать format или его двоюродных братьев - prettyNum и formatC вместо.

Сноска: для форматирования даты (POSIXct или POSIXlt) вам нужна функция форматирования даты strptime

0 голосов
/ 11 января 2019

Чтобы быть консервативным, значение р 0,32312 должно быть округлено до 0,324, а не 0,323.Вот мое решение:

format.p = function(p, precision=0.001) {
  digits = -log(precision, base=10)
  p = formatC(ceiling(p/precision)*precision,format = 'f', digits=digits)
  p[p == formatC(0, format='f', digits=digits)] = paste0('<', precision)
  p
}
...