(Acest articol a fost publicat pentru prima dată pe R | Dr. Tom Palmerși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Introducere
Ați avut vreodată nevoie să prezentați codul și ieșirea pentru mai multe limbi din același document sau site -ul web? Lucrez în (boli non-infecțioase) epidemiologie și, prin urmare, este comun ca cercetătorii să prezinte codul R și Stata în același document. Cu toate acestea, un document quarto poate rula doar un singur motor. Există deja mai multe lucrări în jurul soluțiilor, care includ:
- Scrierea diferitelor celule de cod lingvistice, dar făcându -le bucăți neevaluate/nu executate (acest lucru se face mult pe site -ul documentației Quarto). Se poate include, de asemenea, parcele salvate din diferite limbi;
- Dacă documentul dvs. are o combinație de limbi din care puteți apela unul de la celălalt, cum ar fi utilizarea
reticulează din interiorul r pentru a rula python sau folosind
Statamarkdown din interiorul r la rularea Stata sau folosind
Juliacall din interiorul R pentru a rula Julia, atunci acestea pot fi combinate într -un document de cvarto; - Sau pentru unele limbi precum R și Python, am putea chiar să încorporăm implementări complete webAssembling ale limbajului (respectiv Webr și Pyodide) într -o pagină web (care, cu siguranță, pare un pic excesiv pentru munca mea).
Am găsit o soluție alternativă care vă permite să utilizați motoarele native pentru fiecare limbă. De curând m -am împiedicat de codul scurt de încorporare al Quarto. Acest lucru permite un alt (sau celulele selectate de la un alt document de quarto) să fie încorporat într -un document quarto. Mi s -a întâmplat un gând, ce se întâmplă dacă documentul/s -a încorporat a folosit un alt motor? Ar funcționa asta? Acest lucru nu este menționat în mod explicit pe pagina de documentare, așa că am dat drumul. În mod remarcabil, răspunsul se dovedește a fi că funcționează! Să aflăm ce să facem.
Utilizarea codului scurt EMBED pentru a crea un document cu cvarto cu mai multe motoare efectiv
În exemplul de mai jos folosesc un tabset într -un document HTML folosind motorul KNITR. Am încorporat documentele folosind motoarele alternative pentru Python, Stata și Julia folosind {{< embed >}}
Cod scurt, așa cum se arată mai jos. Pentru fiecare limbă, arată doar tipărirea unui șir și un complot de bază.
--- title: An effectively multi-engine Quarto document using the embed shortcode format: html: embed-resources: true engine: knitr --- ::: {.panel-tabset .nav-pills} ## R ```{r} print("Hello World, from R") ``` ```{r} #| fig-align: "center" x <- seq(-10,10, by = 0.1) y <- x ^ 3 plot(x, y, type = "l") ``` ## Python {{< embed python-code-using-jupyter-python3-engine.qmd echo=true >}} ## Stata {{< embed stata-code-using-jupyter-nbstata-engine.qmd echo=true >}} ## Julia {{< embed julia-code-using-julia-engine.qmd echo=true >}} :::
Desigur, presupun că ați configurat fiecare motor în prealabil.
Reducerea documentului quarto de mai sus are ca rezultat executarea și încorporată documentele încorporate în acesta. Am inclus ieșirea de mai jos (iar codul sursă complet este în acest depozit). Faceți clic pe filele pentru a afișa codul și ieșirea pentru fiecare limbă.
În codul de mai sus, în fiecare caz, am încorporat întregul document de cvarto, dar puteți specifica și un ID de bloc de cod specific (sau dacă documentul încorporat este un caiet Jupyter, .iPynb Fișier, puteți specifica un ID, etichetă sau etichetă a celulelor).
Rezumat
Am arătat cum să folosesc codul scurt de cvarto pentru a încorpora documente de cvarto folosind motoare alternative pentru a crea un document cu cvarto cu mai multe motoare.