2017-08-25 1 views
1

J'ai remarqué ce comportement bizarre de kable - la jolie impression disparaît après l'exécution d'un morceau.knitr :: Kable ne imprime pas assez après l'exécution d'un morceau de R

> knitr::kable(head(iris, 3)) 


| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species | 
|------------:|-----------:|------------:|-----------:|:-------| 
|   5.1|   3.5|   1.4|   0.2|setosa | 
|   4.9|   3.0|   1.4|   0.2|setosa | 
|   4.7|   3.2|   1.3|   0.2|setosa | 

Maintenant, faites Fichier> Nouveau fichier> R Notebook. Cela crée un cahier de démonstration, avec un seul morceau contenant plot(cars). Exécutez ce bloc dans le bloc-notes

> plot(cars) 

Ensuite, imprimez à nouveau le tableau. Cette fois, la sortie semble différente. Pourquoi?

> knitr::kable(head(iris, 3)) 
[1] "| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species |" 
[2] "|------------:|-----------:|------------:|-----------:|:-------|" 
[3] "|   5.1|   3.5|   1.4|   0.2|setosa |" 
[4] "|   4.9|   3.0|   1.4|   0.2|setosa |" 
[5] "|   4.7|   3.2|   1.3|   0.2|setosa |" 
attr(,"format") 
[1] "markdown" 
attr(,"class") 
[1] "knit_asis" 
attr(,"knit_cacheable") 
[1] NA 



> packageVersion("knitr") 
[1] ‘1.17’ 


> sessionInfo() 
R version 3.3.3 (2017-03-06) 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 
Running under: OS X El Capitan 10.11.6 

locale: 
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8 

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

loaded via a namespace (and not attached): 
[1] tools_3.3.3 highr_0.6 knitr_1.17 


> RStudio.Version() 
$citation 

To cite RStudio in publications use: 

    RStudio Team (2016). RStudio: Integrated Development for R. RStudio, 
    Inc., Boston, MA URL http://www.rstudio.com/. 

A BibTeX entry for LaTeX users is 

    @Manual{, 
    title = {RStudio: Integrated Development Environment for R}, 
    author = {{RStudio Team}}, 
    organization = {RStudio, Inc.}, 
    address = {Boston, MA}, 
    year = {2016}, 
    url = {http://www.rstudio.com/}, 
    } 


$mode 
[1] "desktop" 

$version 
[1] ‘1.0.153’ 

Répondre

1

Lorsque vous exécutez ce morceau, l'environnement tools:rstudio sur la liste de recherche est modifiée pour ajouter une fonction appelée print.knitr_kable qui est différent de celui interne dans le paquet knitr.

Voici ce que je vois avant:

> ls("tools:rstudio") 
[1] "debugSource"    "knit_with_parameters"  
[3] "registerShinyDebugHook" "RStudio.Version"   
[5] "rstudioDiagnosticsReport" "RStudioGD"    
[7] "source.with.encoding" 

et voici ce que je vois après:

> ls("tools:rstudio") 
[1] "debugSource"     "dplyr_tibble_print_original" 
[3] "knit_with_parameters"  "print.knitr_kable"   
[5] "registerShinyDebugHook"  "RStudio.Version"    
[7] "rstudioDiagnosticsReport" "RStudioGD"     
[9] "source.with.encoding" 

Pour une raison quelconque, la fonction est exécutée tools:rstudio au lieu de l'original. Je peux récupérer le comportement original en exécutant detach("tools:rstudio"), mais cela endommage Rstudio de plusieurs façons, donc je ne le recommande pas. Une façon moins extrême est de dire

e <- as.environment("tools:rstudio") 
e$print.knitr_kable <- knitr:::print.knitr_kable 

mais cela ne dure pas: rstudio fixe apparemment chaque fois que vous exécutez un morceau dans le bloc-notes. Vous pouvez également effectuer un appel explicite chaque fois que vous souhaitez imprimer, par exemple.

knitr:::print.knitr_kable(knitr::kable(head(iris, 3))) 

Probablement la meilleure solution est pour knitr de changer il fait ce rstudio veut lorsqu'il est exécuté dans un ordinateur portable rstudio et la jolie impression autrement, ou pour rstudio changer pour exécuter la fonction knitr quand il est pas dans un bloc-notes , mais j'imagine que ce n'est pas une grande priorité: si vous utilisez un ordinateur portable, pourquoi voudriez-vous ce que vous voyez dans la console?

+0

Merci! knitr ::: print.knitr_kable est une solution raisonnable. En ce qui concerne les raisons pour lesquelles je m'en soucie: kable est incroyablement utile pour imprimer des cadres de données. Un cas d'utilisation typique: partager des résultats avec des collègues sur Slack. En outre, il est un peu frustrant que l'exécution d'un morceau peut changer d'état de cette façon. – Shantanu

+0

J'ai regardé un peu plus, et cela ressemble à un bug dans le code RStudio. Je vais soumettre une demande de tirage pour le réparer. – user2554330

+0

Merci d'avoir cherché ça! Je vais aller de l'avant et accepter cette réponse. – Shantanu