【问题标题】:How can I use JavaScript in code chunks of RMarkdown?如何在 RMarkdown 的代码块中使用 JavaScript?
【发布时间】:2019-01-10 13:46:50
【问题描述】:

this answer 的启发,我想在 R 中使用这个数据框

input <- data.frame(text = c("a", "b", "c"), 
                    page_number = c(3, 5, 6))

从文本中创建一个列表,该列表链接到不同的 page_numbers。该解决方案描述了如何在 Markdown 中使用 JavaScript,但遗憾的是没有描述如何在代码块中使用它(这是动态创建列表所必需的)。

【问题讨论】:

    标签: javascript r r-markdown


    【解决方案1】:

    我喜欢将htmltools 包用于此类工作。

    您可以使用 htmltools::a() 创建 HTML 锚点。
    为了创建幻灯片 #2 的链接,您需要编写:

    htmltools::a("text", href = "javascript:slidedeck.loadSlide(2)")
    

    您可以轻松地向量化这个表达式。不要忘记将结果列表传递给htmltools::tagList()
    这是问题中引用的示例的最小 Rmd:

    ---
    title: "Presentation"
    output: ioslides_presentation
    ---
    
    ## Slide 1 - page 2
    
    This is the first slide. With links to other slides:
    
    ```{r echo=FALSE}
    input <- data.frame(text = c("a", "b", "c"), 
                        page_number = c(3, 5, 6))
    
    htmltools::tagList(
      mapply(
        htmltools::a, 
        input$text, 
        href = sprintf("javascript:slidedeck.loadSlide(%i)", input$page_number), 
        SIMPLIFY = FALSE)
    )
    ```
    \
    
    If you prefer the tidyverse:
    
    ```{r echo=FALSE, message=FALSE}
    library(tidyverse)
    
    tribble(
      ~text, ~page_number,
      "a",   3,
      "b",   5,
      "c",   6
    ) %>%
      transmute(
        text, 
        href = str_glue("javascript:slidedeck.loadSlide({page_number})")
      ) %>%
      pmap(~ htmltools::a(.x, href = .y)) %>%
      htmltools::tagList()
    ```
    
    ## Slide 2 - page 3
    
    Text for slide 2
    
    ## Slide 3 - page 4
    
    Text for slide 3
    
    ## Slide 4 - page 5
    
    Text for slide 4
    
    ## Slide 5 - page 6
    
    Text for slide 4
    

    【讨论】:

      【解决方案2】:

      最简单的方法是在创建所需原始字符串的代码块上使用results='asis'。您可以将其包装到原始 HTML 块中,以确保它不会被视为 Markdown,而是被视为 HTML。

      ~~~{=html}
      ```{r, echo=FALSE, results='asis'}
      input <- data.frame(text = c("a", "b", "c"), 
                          page_number = c(3, 5, 6))
      links <- paste('<a href="', input$text, '">', input$page_number, "</a>", sep="")
      cat(links, sep = "\n")
      ```
      ~~~
      

      【讨论】:

        【解决方案3】:

        抱歉,我无法发表评论,但您想要 javascript 块吗? 如果是这样,这对您有帮助吗?

        第一个

        install.package(knitr)
        

        然后在你的 R Markdown 文件中:

        ```{r setup, include=FALSE}
        knitr::opts_chunk$set(echo = TRUE)
        library(knitr)
        ```
        

        ```{js}
        some javascript code in here
        ```
        

        【讨论】:

        • 感谢您的回答。我尝试在 js 块中使用 Slide 4 。不幸的是,它不起作用。有什么建议吗?
        • 您可以尝试安装软件包 knitr 并将代码库(knitr)添加到您的 R 降价文件中的 r 设置中吗?编辑:也许这可以帮助你:rmarkdown.rstudio.com/authoring_knitr_engines.html%23sql
        猜你喜欢
        • 2019-12-10
        • 1970-01-01
        • 2023-01-25
        • 2021-11-29
        • 1970-01-01
        • 2023-03-16
        • 2017-12-08
        • 1970-01-01
        相关资源
        最近更新 更多