2016-12-16 4 views
5

Я работаю над своей первой записью R, которая работает очень хорошо, за исключением одной проблемы. Я хотел бы быть цифры, которые я выходной инлайн сR ноутбук: opts_chunk не имеет эффекта

`r realbignumber` 

иметь запятые в качестве разделителя и максимум 2 знака после запятой: 123,456,789.12

Для того, чтобы достичь этого, я добавил кусок в начале моего документа, который содержит ...

```{r setup} 
knitr::opts_chunk$set(echo = FALSE, warning=FALSE, cache = TRUE, message = FALSE) 
knitr::opts_chunk$set(inline = function(x){if(!is.numeric(x)){x}else{prettyNum(round(x,1), big.mark = ",")}}) 
options(scipen=999) 
``` 

подавление научных чисел работает как шарм, так что кусок определенно выполняется. Однако форматирование встроенного вывода чисел не работает.

Любые идеи, почему это может быть? Обычно ли эти настройки не работают с ноутбуками R?

Edit:

Решение, предлагаемое here также не оказывает влияния на формат вывода чисел.

+0

Я не могу на самом деле найти 'inline' вариант куска для форматирования результатов инлайн. Можете ли вы указать на документацию, где это обсуждается? –

+0

Я удалил свой ответ, потому что нашел это: http://stackoverflow.com/a/18967590/3022126 – Phil

+0

Я попробовал крючок, упомянутый в нижней части вопроса, с которым вы связались (knitr :: knit_hooks $ set (inline = function (x) {if (! is.numeric (x)) {x} else {prettyNum (round (x, 2), big.mark = ",")}})), но он также не влияет на вывод. –

ответ

1

Вот пример, иллюстрирующий два способа печати большого количества в документе R Markdown. Во-первых, код для использования функции prettyNum() в встроенном блоке R.

Sample document where we test printing a large number. First set the number in an R chunk. 
```{r initializeData} 
theNum <- 1234567891011.03 
options(scipen=999,digits=16) 
``` 

The R code we'll use to format the number is: `prettyNum(theNum,width=23,big.mark=",")`. 

Next, print the large number. `r prettyNum(theNum,width=23,big.mark=",")`. 

Альтернатива использования вариантов блоков работает следующим образом.

Now, try an alternative using knitr chunks. 

```{r prettyNumHook } 
knitr::knit_hooks$set(inline = function(x) { if(!is.numeric(x)){ x }else{ prettyNum(x, big.mark=",",width=23) } }) 
``` 
Next, print the large number by simply referencing the number in an inline chunk as `theNum`: `r theNum`. 

Когда оба куски кода встроены в файле RMD и трикотажном, выход следующим образом, показывая, что оба методы дает одинаковый результат.

enter image description here

С уважением,

Len

Смежные вопросы