Pat*_*ada 6 javascript r r-markdown
受到这个答案的启发,我想在 R 中使用例如这个数据框
input <- data.frame(text = c("a", "b", "c"),
page_number = c(3, 5, 6))
Run Code Online (Sandbox Code Playgroud)
从文本中创建一个列表,该列表链接到不同的 page_numbers。该解决方案描述了如何在 Markdown 中使用 JavaScript,但不幸的是没有描述如何在代码块中使用它(这是动态创建列表所必需的)。
抱歉,我无法发表评论,但是您想要 javascript 块吗?如果是这样,这对您有帮助吗?
第一的
install.package(knitr)
Run Code Online (Sandbox Code Playgroud)
然后在你的 R Markdown 文件中:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
```
Run Code Online (Sandbox Code Playgroud)
和
```{js}
some javascript code in here
```
Run Code Online (Sandbox Code Playgroud)
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")
```
~~~
Run Code Online (Sandbox Code Playgroud)
我喜欢使用该htmltools包来完成此类工作。
您可以使用 来创建 HTML 锚点htmltools::a()。
为了创建幻灯片 #2 的链接,您需要编写:
htmltools::a("text", href = "javascript:slidedeck.loadSlide(2)")
Run Code Online (Sandbox Code Playgroud)
您可以轻松地矢量化这个表达式。不要忘记将结果列表传递给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
Run Code Online (Sandbox Code Playgroud)