2016-12-16 32 views
5

Pracuję nad moim pierwszym notebookiem R, który działa całkiem dobrze, z wyjątkiem jednego problemu. Chciałbym być numery że wyjście inline zNotebook R: opts_chunk nie ma żadnego efektu

`r realbignumber` 

mieć przecinki jako separator i max pkt 2 po przecinku: 123,456,789.12

W tym celu dodałem kawałek na początku mojego dokumentu, który zawiera ...

```{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) 
``` 

Zwalnianie liczb naukowych działa jak urok, więc fragment jest definitywnie wykonany. Formatowanie wbudowanego wyjścia liczb nie działa.

Jakieś pomysły, dlaczego tak może być? Czy tego rodzaju ustawienia zwykle nie działają z notatnikami R?

Edit:

Rozwiązanie sugerowane here ma też żadnego wpływu na format wyjściowy liczb.

+0

nie mogę faktycznie znaleźć opcję 'inline' kawałek dla formatowania wyników rolkach. Czy możesz wskazać na dokumentację, w której to omówiono? –

+0

Usunąłem odpowiedź, ponieważ znalazłem to: http://stackoverflow.com/a/18967590/3022126 – Phil

+0

Próbowałem haka wspomnianego na dole pytania, z którym się łączyłeś (knitr :: knit_hooks $ set (inline = function (x) {if (! is.numeric (x)) {x} else {prettyNum (round (x, 2), big.mark = ",")}})), ale także nie wpływa na wynik. –

Odpowiedz

1

Oto przykład ilustrujący dwa sposoby drukowania dużej liczby w dokumencie R Markdown. Najpierw kod do użycia funkcji prettyNum() w wbudowanym fragmencie 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=",")`. 

Alternatywa zastosowania opcji porcji działa w następujący sposób.

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`. 

Gdy oba fragmenty kodu są osadzone w pliku RMD i dzianiny, wyjście jest w następujący sposób, pokazując, że obie techniki dają ten sam rezultat.

enter image description here

pozdrowienia,

Len