Heim  >  Fragen und Antworten  >  Hauptteil

Einbetten von HTML, das von einer R-Funktion generiert wurde

Ich möchte HTML dynamisch erstellen und dieses HTML rendern Im Quart. Die eigentliche Anwendung beinhaltet das Einfügen eines iFrames, Aber der Einfachheit halber erstellen wir einfach ein <img>-Tag.

Das ist mein .qmd-Code:

```{r}
source("awash-functions.r")
```

How do you inject html text produced in an r function into a **quarto** document? 
In R markdown, I had the function `sprintf` a string. That doesn't seem to work here!

Here is `awash-functions.r`:

    imageLink <- function(iUrl, iText) {
      sprintf("<img src = '%s' width='24'>&emsp;%s", iUrl, iText)
    }

let's call the function and see what appears:

```{r echo=FALSE}
imageLink("https://www.united.com/8cd8323f017505df6908afc0b72b4925.svg", "united logo")
```

and now, here's what it's supposed to look like:

<img src = 'https://www.united.com/8cd8323f017505df6908afc0b72b4925.svg'>&emsp;united logo

Es wird gerendert und die Funktion wird offensichtlich aufgerufen. Aber es zeigt den HTML-Code anstelle des Bildes:

Ich weiß, das ist einfach, aber ich kann es nicht finden. Vielen Dank!

P粉513316221P粉513316221181 Tage vor381

Antworte allen(1)Ich werde antworten

  • P粉883973481

    P粉8839734812024-04-02 11:25:43

    有两点需要注意:

    • 首先,Quarto 默认情况下将任何代码块输出包装在

       tag. To get the output asis you need to use the chunk option results: asis.

    • Secondly, sprintf (or even print) returns output enclosed within quotes. So after using results: asis, you would get the html tags but would also get the quotes. So you need to wrap the sprintf with cat to get intended results.

    ---
    format: html
    ---
    
    ```{r}
    #| echo: false
    imageLink <- function(iUrl, iText) {
      cat(sprintf(" %s", iUrl, iText))
    }
    ```
    
    ```{r}
    #| echo: false
    #| results: asis
    imageLink("https://www.united.com/8cd8323f017505df6908afc0b72b4925.svg", "united logo")
    ```
    
    and now, here's what it's supposed to look like:
    
     united logo

    Antwort
    0
  • StornierenAntwort