Как я могу использовать JavaScript в фрагментах кода RMarkdown?

Вдохновленный этот ответ, я хотел бы использовать, например, этот фрейм данных в R

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

для создания списка из текста, который ссылается на разные номера_страниц. Решение описывает, как использовать JavaScript в Markdown, но, к сожалению, не описывает, как использовать его в фрагментах кода (что необходимо для динамического создания списка).

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
6
0
3 989
3

Ответы 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
```

Спасибо за Ваш ответ. Я попытался использовать <a href = "javascript:slidedeck.loadSlide(4)"> Slide 4 </a> в блоке js. К сожалению, это не работает. Любое предложение?

Patrick Balada 10.01.2019 14:52

Можете ли вы попробовать установить пакет вязальщица и добавить библиотеку кода (knitr) в настройку r в файле уценки R? Обновлено: Возможно, это может вам помочь: rmarkdown.rstudio.com/authoring_knitr_engines.html%23sql

Gainz 10.01.2019 14:57

Самый простой способ - использовать 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")
```
~~~

Мне нравится использовать пакет htmltools для такой работы.

Вы можете создать привязку HTML с помощью htmltools::a().
Чтобы создать ссылку на слайд №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

Другие вопросы по теме