这个问题是关于For loop over dygraph在R中不工作
@Yihui的回答很好地详细说明了如何在markdown循环中创建dygraphs。但是,正如你会注意到的,这些情节之间没有间隔。当它们很多的时候,这就变得很难读了。
```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
res <- lapply(1:2, function(i) dygraph(lungDeaths[, i]))
htmltools::tagList(res)
```
是否有一种方法可以在自定义应用函数本身生成的每个情节之间添加间距,文本,水平线等?
我目前的解决方法是传入一个dyOptions titleHeight参数,以及一个指向外部CSS的dyCSS参数,该参数在标题顶部设置填充。例如,我可以设置titleHeight参数为50px,然后设置标题本身为25px,顶部填充高度为25px。
---
title: "test"
author: "test"
date: "test"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i], main = "Lung Deaths") %>%
dyOptions(titleHeight = 50) %>%
dyCSS("dygraph.css")
})
htmltools::tagList(res)
```
和dygraphs.css文件:
.dygraph-title {
font-size: 25px;
padding-top: 25px;
}
如果我不想要一个情节标题,但仍然想要情节之间的分隔,我传递一个换行符作为标题,如下所示:
```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i], main = "<br>") %>%
dyOptions(titleHeight = 50) %>%
dyCSS("dygraph.css")
})
htmltools::tagList(res)
```
虽然这确实可以增加间距,但我希望尽可能避免使用外部CSS。更不用说,它不允许您在绘图本身之间添加任何其他对象(如文本或水平线)。是否有一种方法可以在函数调用的每次迭代之间手动添加这些对象?
编辑:所以根据下面的答案,我们也可以在每次迭代之间添加一个休息时间,像这样:```{r}
library(dygraphs)
lungDeaths <- cbind(mdeaths, fdeaths)
res <- lapply(1:2, function(i) {
dygraph(lungDeaths[, i])
})
invisible(lapply(1:2, function(i) {
if (!exists("l")) {
l <<- list()
}
l[[i]] <<- htmltools::tags$br()
}))
out <- c(rbind(l, res))
htmltools::tagList(out)
```
这似乎很好,虽然我很想听听其他的想法。
我对tagLists不太熟悉,但似乎可以将包含额外规则、间距、文本等的标记/标记与dygraph列表交错,例如:
space <- list(htmltools::tags$h1("Title"),
htmltools::tags$h2("Header text"))
out <- c(rbind(space, res))
htmltools::tagList(out)
列表中的每一组标签将依次呈现