如何在RMarkdown的代码块中使用JavaScript?

8

这个答案的启发,我想在R中使用类似于这个数据框的东西。

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

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

3个回答

7
抱歉我无法进行评论,但您需要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代码块中使用<a href="javascript:slidedeck.loadSlide(4)">Slide 4</a>,但不幸的是它没有起作用。有什么建议吗? - Patrick Balada
你能否尝试安装 knitr 包,并在 R Markdown 文件中添加代码库(library(knitr)) 到你的 R 设置中?编辑:也许这个链接可以帮助你:https://rmarkdown.rstudio.com/authoring_knitr_engines.html%23sql - Gainz
如果有人想知道如何将JavaScript部分封装在一个文件中,并在yaml头部引用它,可以参考这个链接。这可能会有所帮助。 - Patrick

5
最简单的方法是在创建所需的原始字符串的代码块上使用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")
```
~~~

5

我喜欢使用htmltools包进行此类工作。

您可以使用htmltools::a()创建HTML锚点。
要创建到第二个幻灯片的链接,您需要编写:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接