Генерируйте ggplotly с помощью walk или lapply без использования rmarkdown :: render - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь создать несколько интерактивных ggplotly графиков, используя команду purr walk для столбца графиков.Я не могу заставить его работать.Тогда я могу заставить работать по отдельности, но я не могу «массово производить» их, используя walk, хотя я могу заставить его работать, как показано в моем MWE с lapply и рендерингом с rmarkdown::render('mwe_plotly.Rmd', output_file='report.html'.Единственная проблема заключается в том, что он не использует кэшированные узлы.Для меня это серьезная проблема, так как мои документы обрабатываются ~ 2 дня прямо сейчас, и я все еще добавляю к ним вещи.

Итак, мой вопрос: могу ли я заставить это работать без использования rmarkdown::render('mwe_plotly.Rmd', output_file='report.html'?По сути, я отказался от использования walk, поскольку lapply работает.Но я все еще хотел поделиться этим мнением.

Вот мой MWE:

MWE:

---
title: "MWE Plotly"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
#Needed packages
library(plotly)
library(ggcorrplot)
library(dplyr)
library(purrr)
#For reproducability
set.seed(1)

#Generate some numbers
numbers <- tibble(
  a = runif(10),
  b = runif(10),
  c = runif(10)
)

#Function for making the plot
cor_plotter_ex <- function(data){
  cor_plot <- ggcorrplot(corr = data)
  return(cor_plot)
}
```

```{r plot_plotly, out.width = "33%", hold = T, plotly = T}
#Some data
tib <- tibble(
  Id = letters[1:3],
  data = list(numbers)
) %>% 
  mutate(
    cor = map(data, ~cor(.x)),
    cor_plot = map(cor, ~cor_plotter_ex(.x))
  )

#Plot them with walk does not work
walk(tib$cor_plot,
     ~ggplotly(.x))
#As it only generates the first plot
#and it is not intractable
#Plot them with lapply and tagList does work
htmltools::tagList(lapply(tib$cor_plot,
     function(.x) {ggplotly(.x)}))
#Iff one renders the document with 
#rmarkdown::render('mwe_plotly.Rmd', output_file='report.html')
#Plotting one of them works
ggplotly(tib$cor_plot[[1]])
```

```{r regular_plot, out.width = "33%", hold = T}
#Just printing the plots clearly works
walk(tib$cor_plot,
     ~print(.x))
```
...