add slides
This commit is contained in:
parent
5a856fa51f
commit
320df71774
|
@ -0,0 +1 @@
|
|||
../../_extensions
|
|
@ -0,0 +1,155 @@
|
|||
---
|
||||
title: "〇、R语言实践前篇"
|
||||
subtitle: 《区域水环境污染数据分析实践》<br>Data analysis practice of regional water environment pollution
|
||||
author: 苏命、王为东<br>中国科学院大学资源与环境学院<br>中国科学院生态环境研究中心
|
||||
date: today
|
||||
lang: zh
|
||||
format:
|
||||
revealjs:
|
||||
theme: dark
|
||||
slide-number: true
|
||||
chalkboard:
|
||||
buttons: true
|
||||
preview-links: auto
|
||||
lang: zh
|
||||
toc: true
|
||||
toc-depth: 1
|
||||
toc-title: 大纲
|
||||
logo: ./_extensions/inst/img/ucaslogo.png
|
||||
css: ./_extensions/inst/css/revealjs.css
|
||||
pointer:
|
||||
key: "p"
|
||||
color: "#32cd32"
|
||||
pointerSize: 18
|
||||
revealjs-plugins:
|
||||
- pointer
|
||||
filters:
|
||||
- d2
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
#| cache: false
|
||||
lang <- "cn"
|
||||
require(tidyverse)
|
||||
knitr::opts_chunk$set(echo = TRUE)
|
||||
```
|
||||
|
||||
## R语言实践部分课程简介
|
||||
|
||||
**接下来的课程由我来带着大家一起学习、实践基于R语言的数据分析。**
|
||||
|
||||
### 自我介绍
|
||||
|
||||
- 苏命:来自中国科学院生态环境研究中心
|
||||
- 主要从事**水源水质水生态**方面的研究
|
||||
|
||||
### 课件
|
||||
|
||||
- 采用`R语言`+`quarto`完成
|
||||
- 网页公开:[https://drwater.rcees.ac.cn/course/public/RWEP/\@PUB/index.html](https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/index.html)
|
||||
- 课件代码:[https://drwater.rcees.ac.cn/git/course/RWEP.git](https://drwater.rcees.ac.cn/git/course/RWEP.git)
|
||||
|
||||
## 如何学习接下来的内容?
|
||||
|
||||
- 上课形式:
|
||||
- **实践操作为主**,目的是让每一位同学都能独立开展基于R的数据分析
|
||||
- **2-3人一组**,自由分组,相互帮助
|
||||
- 准备工作:
|
||||
- 个人笔记本电脑,Microsoft Windows、GNU/Linux、MacOS系统
|
||||
- 安装好**Microsoft Excel**
|
||||
- 能联网
|
||||
- 如果电池不够用,建议带上插座
|
||||
- 上课规则
|
||||
- 可随时打断,**不懂就问**
|
||||
- **无特殊情况不迟到**,否则操作过程容易跟不上
|
||||
|
||||
## Rstudio Server使用
|
||||
|
||||
- 服务网址:[https://drwater.rcees.ac.cn/rs1/](https://drwater.rcees.ac.cn/rs1/)
|
||||
- 每位同学使用1个账号,随机生成
|
||||
- 密码:\_RWEP_2024\_
|
||||
- 后面的实践课程可在该服务器上完成
|
||||
|
||||
|
||||
## 请记住自己的账号!
|
||||
|
||||
::: {layout-ncol=2}
|
||||
|
||||
```{r}
|
||||
#| echo: false
|
||||
#| output: asis
|
||||
coursememberdf <- readxl::read_xlsx("../../data/course_member.xlsx")
|
||||
nmem <- nrow(coursememberdf)
|
||||
set.seed <- 23
|
||||
|
||||
uiddf <- coursememberdf |>
|
||||
dplyr::mutate(uid = paste0("ruser", sprintf("%02d", sample(1:nmem, nmem)))) |>
|
||||
dplyr::select(uid, 姓名) |>
|
||||
dplyr::arrange(uid) |>
|
||||
dplyr::mutate(group = (dplyr::row_number() - 1) %/% 10 + 1) |>
|
||||
tidyr::nest(gdf = -group) |>
|
||||
dplyr::mutate(tab = purrr::map(gdf, ~ knitr::kable(.x)))
|
||||
|
||||
uiddf$tab[[1]]
|
||||
uiddf$tab[[2]]
|
||||
|
||||
```
|
||||
:::
|
||||
|
||||
## 请记住自己的账号!
|
||||
|
||||
::: {layout-ncol=2}
|
||||
|
||||
```{r}
|
||||
#| echo: false
|
||||
#| output: asis
|
||||
|
||||
uiddf$tab[[3]]
|
||||
uiddf$tab[[4]]
|
||||
```
|
||||
:::
|
||||
|
||||
## 课后作业
|
||||
|
||||
提交形式:`第*次作业_姓名.qmd`文件
|
||||
|
||||
模板:
|
||||
|
||||
````
|
||||
---
|
||||
title: "课后作业*"
|
||||
author: 姓名
|
||||
---
|
||||
|
||||
|
||||
# 第1题
|
||||
|
||||
说明
|
||||
|
||||
```{r}
|
||||
# Here is the code
|
||||
|
||||
```
|
||||
|
||||
# 第2题
|
||||
|
||||
说明
|
||||
|
||||
```{r}
|
||||
# Here is the code
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
````
|
||||
|
||||
|
||||
|
||||
## 欢迎讨论!{.center}
|
||||
|
||||
|
||||
`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")`
|
||||
|
|
@ -0,0 +1 @@
|
|||
../../_extensions
|
|
@ -0,0 +1,222 @@
|
|||
---
|
||||
title: "一、R语言介绍"
|
||||
subtitle: 《区域水环境污染数据分析实践》<br>Data analysis practice of regional water environment pollution
|
||||
author: 苏命、王为东<br>中国科学院大学资源与环境学院<br>中国科学院生态环境研究中心
|
||||
date: today
|
||||
lang: zh
|
||||
format:
|
||||
revealjs:
|
||||
theme: dark
|
||||
slide-number: true
|
||||
chalkboard:
|
||||
buttons: true
|
||||
preview-links: auto
|
||||
lang: zh
|
||||
toc: true
|
||||
toc-depth: 1
|
||||
toc-title: 大纲
|
||||
logo: ./_extensions/inst/img/ucaslogo.png
|
||||
css: ./_extensions/inst/css/revealjs.css
|
||||
pointer:
|
||||
key: "p"
|
||||
color: "#32cd32"
|
||||
pointerSize: 18
|
||||
revealjs-plugins:
|
||||
- pointer
|
||||
filters:
|
||||
- d2
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
#| cache: false
|
||||
lang <- "cn"
|
||||
require(tidyverse)
|
||||
require(learnr)
|
||||
knitr::opts_chunk$set(echo = TRUE)
|
||||
```
|
||||
|
||||
## R的历史
|
||||
|
||||
::: columns
|
||||
::: {.column width="85%"}
|
||||
|
||||
- 1976年:
|
||||
- 前身是S语言,由贝尔实验室John Chambers及其同事开发
|
||||
- 1993年:
|
||||
- R语言由Ross Ihaka和Robert Gentleman在奥克兰大学开发
|
||||
- R的诞生是为了提供一个强大的统计计算和图形显示的平台
|
||||
|
||||
:::
|
||||
::: {.column width="15%"}
|
||||
|
||||
![](https://cran.r-project.org/Rlogo.svg)
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
|
||||
- 1995年:R发布第一个公开版本
|
||||
- 2000年代: R语言逐渐成为统计学和数据科学领域重要工具
|
||||
- 2010年:Hadley Wickham发布了ggplot2包,数据可视化方面更强
|
||||
- 2016年:创建CRAN(Comprehensive R Archive Network),R包中央库
|
||||
- 至今
|
||||
- **R语言已成为数据科学和统计学领域最受欢迎的工具之一,被广泛用于数据分析、机器学习、数据可视化等领域**
|
||||
|
||||
|
||||
|
||||
## R的特点
|
||||
|
||||
### 一般特点
|
||||
|
||||
- 免费、开源、支持各个主要计算机系统。
|
||||
- 完整的程序设计语言,基于函数和对象。
|
||||
- 支持完善的数据类型,如向量、矩阵、数据框等。
|
||||
|
||||
### 技术特点
|
||||
|
||||
- 所有存在都是对象。
|
||||
- 所有动作都是函数调用。
|
||||
- 支持函数编程和对象类。
|
||||
- 是动态类型语言,运行速度相对较慢。
|
||||
|
||||
## R的参考资料
|
||||
|
||||
### 推荐参考书
|
||||
|
||||
- Hadley Wickham and Garrett Grolemund(2022). [R for Data Science](https://r4ds.hadley.nz/)
|
||||
- Hadley Wickham(2019). [Advanced R](https://adv-r.hadley.nz/)
|
||||
- Hadley Wickham(2016). [ggplot2 Elegant Graphics for Data Analysis](https://ggplot2-book.org/)
|
||||
- John M. Chambers(2008). [Software for Data Analysis-Programming with R](https://www.springer.com/gp/book/9780387759357)
|
||||
- Venables, W. N. & Ripley, B. D.(2002). [Modern Applied Statistics with S (MASS)](https://www.springer.com/gp/book/9780387954578)
|
||||
|
||||
|
||||
## R的参考资料
|
||||
|
||||
### 中文参考书
|
||||
|
||||
- 《R语言编程艺术》
|
||||
- 《R语言实战》
|
||||
- 《R语言教程与实践》
|
||||
- 《R语言数据可视化实战》
|
||||
- 《R语言从入门到精通》
|
||||
|
||||
## R的下载与安装
|
||||
|
||||
### R的下载与安装
|
||||
|
||||
- R的官方网站:[https://www.r-project.org/](https://www.r-project.org/)
|
||||
- CRAN镜像网站:[http://mirror.bjtu.edu.cn/cran/](http://mirror.bjtu.edu.cn/cran/)
|
||||
- 下载官方的R软件后按提示安装
|
||||
|
||||
|
||||
{{< video https://vimeo.com/203516510 width="600" height="400">}}
|
||||
|
||||
## RStudio
|
||||
|
||||
|
||||
### 什么是RStudio?
|
||||
|
||||
- RStudio官方网站: [https://posit.co/products/open-source/rstudio/](https://posit.co/products/open-source/rstudio/)
|
||||
- RStudio是一个集成开发环境(IDE),专门用于R语言编程和数据分析。
|
||||
- 它提供了一个直观的界面,使得编写、调试和运行R代码变得更加容易。
|
||||
|
||||
|
||||
## RStudio
|
||||
|
||||
### RStudio的功能
|
||||
|
||||
1. **代码编辑器**:提供了语法高亮、自动补全和代码折叠等功能。
|
||||
2. **控制台**:用于直接执行R代码并查看结果。
|
||||
3. **环境和历史记录**:可以查看当前加载的数据、函数和变量,以及之前执行过的命令。
|
||||
4. **图形和可视化**:RStudio内置了绘图设备,可以方便地创建各种统计图表。
|
||||
5. **文件管理器**:可直接在RStudio中管理文件和项目。
|
||||
6. **包管理器**:方便地安装、更新和管理R包。
|
||||
7. **Markdown编辑器**:支持Markdown格式,可以创建美观的文档和报告。
|
||||
|
||||
## 如何获取RStudio?
|
||||
|
||||
- RStudio可以从官方网站免费下载并安装:[RStudio官网](https://posit.co/download/rstudio-desktop/)
|
||||
- RStudio是一个强大的R编程环境,为R用户提供了丰富的功能和工具。
|
||||
- 它简化了R语言的使用,提高了数据分析和可视化的效率。
|
||||
|
||||
|
||||
{{< video https://vimeo.com/203516968 width="600" height="400">}}
|
||||
|
||||
## 扩展包:R package
|
||||
|
||||
- R有一万多个扩展软件包,提供了各种各样的功能
|
||||
- 已安装的基本R软件伴随一些必要的扩展包,如base, stats, graphics等,这些包在启动R时会默认载入
|
||||
- 其它扩展包需要用`library(.)`函数载入运行
|
||||
- 或者采用`dplyr::filter(.)`方式
|
||||
|
||||
::: panel-tabset
|
||||
### Code
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
#| eval: false
|
||||
#| out-width: 50%
|
||||
# load a R package
|
||||
library(ggplot2)
|
||||
|
||||
# plot it based on the functions from `ggplot2` package
|
||||
mtcars |>
|
||||
dplyr::filter(cyl != 8) |>
|
||||
ggplot(aes(hp, mpg, color = am)) +
|
||||
geom_point() +
|
||||
geom_smooth(formula = y ~ x, method = "loess")
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```{r}
|
||||
#| echo: false
|
||||
#| out-width: 80%
|
||||
#| fig-width: 6
|
||||
#| fig-height: 3
|
||||
|
||||
library(ggplot2)
|
||||
mtcars |>
|
||||
dplyr::filter(cyl != 8) |>
|
||||
ggplot(aes(hp, mpg, color = am)) +
|
||||
geom_point() +
|
||||
geom_smooth(formula = y ~ x, method = "loess")
|
||||
```
|
||||
:::
|
||||
|
||||
|
||||
## 安装R包
|
||||
|
||||
- 以安装sos包为例。
|
||||
- 在RStudio中调用“Tools”菜单的“Install Packages”,输入或选择sos即可安装。
|
||||
- R图形界面安装
|
||||
- 如果不用RStudio, 在R图形界面选菜单“程序包-安装程序包”进行安装。
|
||||
- 在CRAN镜像选择窗口中选择中国的镜像,如“China (Beijing 2)”,然后选择要安装的扩展软件包名称即可完成下载和安装。
|
||||
- 程序安装
|
||||
|
||||
```r
|
||||
# 指定镜像网站并安装扩展包
|
||||
options(repos=c(CRAN="https://mirror.tuna.tsinghua.edu.cn/CRAN/"))
|
||||
install.packages("sos")
|
||||
|
||||
# 当R包不是CRAN标准包,代码放在[github](https://github.com)
|
||||
if (!require(devtools)) install.packages('devtools')
|
||||
devtools::install_github("kjhealy/socviz")
|
||||
```
|
||||
|
||||
## 安装R包
|
||||
|
||||
{{< video https://vimeo.com/203516241 width="600" height="400">}}
|
||||
|
||||
|
||||
## 结语
|
||||
|
||||
- R语言是一种强大的统计计算和数据分析工具,适用于各种领域。
|
||||
- 通过学习R语言,可以进行数据处理、统计分析和数据可视化。
|
||||
|
||||
|
||||
## 欢迎讨论!{.center}
|
||||
|
||||
|
||||
`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")`
|
|
@ -0,0 +1 @@
|
|||
../../_extensions
|
|
@ -0,0 +1,795 @@
|
|||
---
|
||||
title: "二、R语言语法基础"
|
||||
subtitle: 《区域水环境污染数据分析实践》<br>Data analysis practice of regional water environment pollution
|
||||
author: 苏命、王为东<br>中国科学院大学资源与环境学院<br>中国科学院生态环境研究中心
|
||||
date: today
|
||||
lang: zh
|
||||
format:
|
||||
revealjs:
|
||||
theme: dark
|
||||
slide-number: true
|
||||
chalkboard:
|
||||
buttons: true
|
||||
preview-links: auto
|
||||
lang: zh
|
||||
toc: true
|
||||
toc-depth: 1
|
||||
toc-title: 大纲
|
||||
logo: ./_extensions/inst/img/ucaslogo.png
|
||||
css: ./_extensions/inst/css/revealjs.css
|
||||
pointer:
|
||||
key: "p"
|
||||
color: "#32cd32"
|
||||
pointerSize: 18
|
||||
revealjs-plugins:
|
||||
- pointer
|
||||
filters:
|
||||
- d2
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
#| cache: false
|
||||
lang <- "cn"
|
||||
require(tidyverse)
|
||||
require(learnr)
|
||||
knitr::opts_chunk$set(echo = TRUE)
|
||||
```
|
||||
|
||||
|
||||
## 数据类型
|
||||
|
||||
### 数值型
|
||||
|
||||
R中的数值型数据可以是整数或浮点数。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
(x <- 10)
|
||||
(y <- 1.23e-2)
|
||||
(z <- pi)
|
||||
```
|
||||
|
||||
## 数据类型
|
||||
|
||||
### 字符串
|
||||
|
||||
- R 中的字符串用引号括起来,建议用**双引号**。
|
||||
- 中文编码主要有GBK编码和UTF-8编码, 可能遇到编码错误造成乱码。RStudio软件默认采用UTF-8编码,在R程序运行时字符串一般用UTF-8编码保存。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
(str <- "Hello, World!")
|
||||
(str <- 'Hello, World!')
|
||||
(str <- 'He was very angry, and shouted: "Stop!"')
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 数据类型
|
||||
|
||||
### 逻辑
|
||||
|
||||
```{r}
|
||||
c(TRUE, FALSE)
|
||||
|
||||
```
|
||||
|
||||
## 特殊值
|
||||
|
||||
::: columns
|
||||
::: {.column width="45%"}
|
||||
- `NA`: 这是最常见的NA类型,表示缺失值
|
||||
- `NA_integer_`: 这是NA的整数类型
|
||||
- `NA_real_`: 这是NA的实数类型
|
||||
- `NA_character_`: 这是NA的字符类型
|
||||
- `NA_complex_`: 这是NA的复数类型
|
||||
|
||||
:::
|
||||
::: {.column width="5%"}
|
||||
:::
|
||||
::: {.column width="45%"}
|
||||
```{r}
|
||||
#| echo: true
|
||||
pi
|
||||
NA
|
||||
NA_character_
|
||||
Inf
|
||||
```
|
||||
|
||||
:::
|
||||
:::
|
||||
|
||||
## 特殊值
|
||||
|
||||
在 R 中,`Inf` 代表正无穷大(positive infinity),而 `-Inf` 则代表负无穷大(negative infinity)。这些值通常出现在数学计算中,例如除以零或对负数取对数等操作可能会导致无穷大的结果。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 正无穷大
|
||||
(x <- Inf)
|
||||
|
||||
# 负无穷大
|
||||
(y <- -Inf)
|
||||
|
||||
# 无穷大的运算
|
||||
(a <- 5 / 0)
|
||||
|
||||
(b <- log(0))
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
## 变量赋值
|
||||
|
||||
在 R 中,可以使用 `<-` 或 `=` 运算符将值赋给变量,**建议用`<-`**。
|
||||
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 使用 `<-` 运算符
|
||||
(x <- 10)
|
||||
(y <- "hello")
|
||||
|
||||
# 使用 `=` 运算符
|
||||
(z = c(1, 2, 3))
|
||||
```
|
||||
|
||||
## 变量赋值
|
||||
|
||||
```{r}
|
||||
# 向量赋值
|
||||
(vec <- c(1, 2, 3, 4, 5))
|
||||
|
||||
# 矩阵赋值
|
||||
(mat <- matrix(1:9, nrow = 3))
|
||||
|
||||
```
|
||||
|
||||
## 变量赋值
|
||||
|
||||
### 数据框赋值
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
|
||||
(df <- data.frame(
|
||||
Name = c("Alice", "Bob", "Charlie"),
|
||||
Age = c(25, 30, 35),
|
||||
Married = c(TRUE, FALSE, TRUE)
|
||||
))
|
||||
```
|
||||
## 变量赋值
|
||||
|
||||
### 列表赋值
|
||||
|
||||
```{r}
|
||||
|
||||
(lst <- list(
|
||||
numbers = c(1, 2, 3),
|
||||
strings = c("a", "b", "c"),
|
||||
matrix = matrix(1:9, nrow = 3)
|
||||
))
|
||||
```
|
||||
|
||||
|
||||
## 数学函数
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
round(pi, digits = 3)
|
||||
log(10)
|
||||
```
|
||||
1. `abs(x)`: 返回 `x` 的绝对值
|
||||
2. `sqrt(x)`: 返回 `x` 的平方根
|
||||
3. `exp(x)`: 以e为底的指数函数值
|
||||
4. `log(x, base)`: 以指定底数的对数函数的值,默认底数为e
|
||||
5. `log10(x)`: 10为底的对数值
|
||||
6. `log2(x)`: 2为底的对数值
|
||||
7. `floor(x)`: 不大于`x`的最大整数
|
||||
8. `ceiling(x)`: 不小于`x`的最小整数
|
||||
|
||||
## 数学函数
|
||||
|
||||
9. `sin(x)`, `cos(x)`, `tan(x)`: 返回 `x` 的正弦、余弦和正切值,其中 `x` 为弧度
|
||||
10. `asin(x)`, `acos(x)`, `atan(x)`: `x` 的反正弦、反余弦和反正切值,返回弧度
|
||||
11. `sinh(x)`, `cosh(x)`, `tanh(x)`: 返回 `x` 的双曲正弦、双曲余弦和双曲正切值
|
||||
12. `asinh(x)`, `acosh(x)`, `atanh(x)`: 反双曲正弦、反双曲余弦和反双曲正切值
|
||||
13. `round(x, digits)`: `x` 四舍五入,`digits`指定小数点后位数
|
||||
14. `trunc(x)`: 返回`x`截断值,即去掉小数部分
|
||||
15. `sign(x)`: 返回符号
|
||||
|
||||
|
||||
## 统计函数
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
x <- c(5, 10, 15, 20, 25)
|
||||
# 计算向量的平均值
|
||||
mean(x)
|
||||
|
||||
# 计算向量的中位数
|
||||
median(x)
|
||||
|
||||
# 计算向量的最小值
|
||||
min(x)
|
||||
|
||||
# 计算向量的最大值
|
||||
max(x)
|
||||
|
||||
# 计算向量的总和
|
||||
sum(x)
|
||||
|
||||
```
|
||||
|
||||
## 统计函数
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
|
||||
# 计算向量的标准差
|
||||
sd(x)
|
||||
|
||||
# 计算向量的方差
|
||||
var(x)
|
||||
|
||||
# 计算向量的分位数
|
||||
quantile(x, probs = c(0.25, 0.5, 0.75))
|
||||
|
||||
# 统计向量的频数
|
||||
(frequency <- table(x))
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 统计函数
|
||||
|
||||
|
||||
### 执行两样本或单样本 t 检验
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
y <- c(3, 8, 13, 18, 23)
|
||||
t.test(x, y)
|
||||
```
|
||||
|
||||
## 统计函数
|
||||
|
||||
### Wilcoxon-Mann-Whitney检验
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
|
||||
wilcox.test(x, y)
|
||||
```
|
||||
|
||||
## 统计函数
|
||||
|
||||
### 创建向量的直方图
|
||||
|
||||
|
||||
```{r}
|
||||
#| fig-width: 5
|
||||
#| fig-height: 3
|
||||
|
||||
hist(x)
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
## 函数调用-练习
|
||||
|
||||
### 题目:设有一组数据集合 x 包含了一些整数,请编写R语言代码计算并输出以下指标:
|
||||
|
||||
- 平均值(mean)
|
||||
- 中位数(median)
|
||||
- 最大值(maximum)
|
||||
- 最小值(minimum)
|
||||
- 数据集合中所有元素的和(sum)
|
||||
- 数据集合的标准差(standard deviation)
|
||||
- 数据集合 x 为:x <- c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
|
||||
|
||||
**要求:使用R语言编写函数,输入参数为数据集合 x,输出为以上指标的值。**
|
||||
|
||||
|
||||
|
||||
|
||||
## 控制流程
|
||||
|
||||
|
||||
### if-else 语句
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
x <- 10
|
||||
|
||||
if (x > 10) {
|
||||
print("x 大于 10")
|
||||
} else {
|
||||
print("x 不大于 10")
|
||||
}
|
||||
```
|
||||
|
||||
## 控制流程
|
||||
|
||||
|
||||
### for 循环
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
for (i in 1:5) {
|
||||
print(i)
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## 自定义函数
|
||||
|
||||
### 定义函数
|
||||
|
||||
使用 `function` 关键字定义函数,并使用 `return` 关键字返回结果。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
my_function <- function(x, y) {
|
||||
return(x + y)
|
||||
}
|
||||
```
|
||||
|
||||
### 调用函数
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
result <- my_function(3, 4)
|
||||
print(result)
|
||||
```
|
||||
|
||||
## 数据结构
|
||||
|
||||
### 向量
|
||||
|
||||
向量是一维数组,可以包含相同类型的元素。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
(v <- c(1, 2, 3, 4, 5))
|
||||
```
|
||||
|
||||
### 列表
|
||||
|
||||
列表可以包含不同类型的元素。
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
(l <- list(a = 1, b = "hello", c = TRUE))
|
||||
```
|
||||
|
||||
## 数值型向量
|
||||
|
||||
### 什么是数值型向量?
|
||||
|
||||
- 在 R 中,向量是一种基本的数据结构。
|
||||
- 数值型向量包含相同类型的数值元素。
|
||||
|
||||
|
||||
### 创建数值型向量
|
||||
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 使用 c() 函数创建数值型向量
|
||||
(numeric_vector <- c(1, 2, 3, 4, 5))
|
||||
```
|
||||
|
||||
## 数值型向量
|
||||
|
||||
### 向量运算
|
||||
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 创建两个数值型向量
|
||||
(vector1 <- c(1, 2, 3))
|
||||
(vector2 <- c(4, 5, 6))
|
||||
|
||||
# 执行向量加法
|
||||
(result <- vector1 + vector2)
|
||||
# 执行向量乘法
|
||||
(result <- vector1 * vector2)
|
||||
```
|
||||
|
||||
## 向量运算
|
||||
|
||||
### 向量求和
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 创建数值型向量
|
||||
vector <- c(1, 2, 3, 4, 5)
|
||||
|
||||
# 求和
|
||||
(sum_result <- sum(vector))
|
||||
```
|
||||
|
||||
## 向量运算
|
||||
|
||||
### 向量平均值
|
||||
|
||||
```{r}
|
||||
#| echo: true
|
||||
# 创建数值型向量
|
||||
vector <- c(1, 2, 3, 4, 5)
|
||||
|
||||
# 平均值
|
||||
(mean_result <- mean(vector))
|
||||
```
|
||||
|
||||
## 运算-数值运算
|
||||
|
||||
- a 的平方。
|
||||
- b 的立方。
|
||||
- a 除以 b 的商和余数。
|
||||
|
||||
**要求:使用R语言编写函数,输入参数为 a 和 b,输出为上述结果。**
|
||||
|
||||
## 运算-逻辑运算
|
||||
|
||||
```{r}
|
||||
all(c(FALSE, 2, 1:3, 3) > 1)
|
||||
any(c(FALSE, 2, 1:3, 3) > 1)
|
||||
(flag1 <- FALSE)
|
||||
(flag2 <- (3 > 2))
|
||||
(flag3 <- TRUE * TRUE)
|
||||
(flag4 <- TRUE * FALSE)
|
||||
(flag5 <- TRUE & FALSE)
|
||||
(flag6 <- TRUE | FALSE)
|
||||
```
|
||||
|
||||
|
||||
## 运算-逻辑运算
|
||||
|
||||
- `which`
|
||||
|
||||
```{r}
|
||||
which(c(FALSE, TRUE, TRUE, FALSE, NA))
|
||||
which((11:15) > 12)
|
||||
|
||||
```
|
||||
|
||||
- `identical`
|
||||
|
||||
```{r}
|
||||
identical(c(1,2,3), c(1,2,NA))
|
||||
identical(c(1L,2L,3L), c(1,2,3))
|
||||
```
|
||||
|
||||
## 运算-字符型
|
||||
|
||||
- 特殊字符
|
||||
|
||||
```{r}
|
||||
c("abc", "", 'a cat', NA, '李明', "\n")
|
||||
```
|
||||
|
||||
- `paste`
|
||||
|
||||
```{r}
|
||||
(users <- paste("ruser", 1:9))
|
||||
paste(users, collapse = ", ")
|
||||
```
|
||||
|
||||
|
||||
## 运算-字符型
|
||||
|
||||
- 大小写
|
||||
|
||||
```{r}
|
||||
letters[1:5]
|
||||
toupper(letters[6:9])
|
||||
tolower(month.abb)
|
||||
stringr::str_to_title(c("monday", "tuesday"))
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 运算-字符型
|
||||
|
||||
- 字符串截取
|
||||
|
||||
```{r}
|
||||
substr("Monday", 1, 3)
|
||||
stringr::str_sub("Monday", 1, 3)
|
||||
```
|
||||
|
||||
## 运算-字符型
|
||||
|
||||
- 类型转换
|
||||
|
||||
```{r}
|
||||
100
|
||||
as.character(100)
|
||||
|
||||
as.numeric(c("0100", "0101"))
|
||||
|
||||
sprintf('renamedfile%03d.png', c(3, 99, 100))
|
||||
```
|
||||
|
||||
|
||||
## 运算-字符型
|
||||
|
||||
- 字符串替换
|
||||
|
||||
```{r}
|
||||
(mystr <- "He was wrong!")
|
||||
gsub("wrong", "right", mystr)
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 索引
|
||||
|
||||
### 向量
|
||||
|
||||
```{r}
|
||||
# 创建一个向量
|
||||
vector <- c("apple", "banana", "cherry", "date")
|
||||
# 访问第三个元素
|
||||
vector[3]
|
||||
# 访问多个元素
|
||||
vector[c(2, 4)]
|
||||
vector[c(2:4)]
|
||||
```
|
||||
|
||||
## 索引
|
||||
|
||||
### 向量
|
||||
|
||||
```{r}
|
||||
# 除了第2个元素
|
||||
vector[-2]
|
||||
# 超界
|
||||
vector[100]
|
||||
# 更新数据
|
||||
vector[7] <- "New Data"
|
||||
vector
|
||||
```
|
||||
|
||||
## 索引
|
||||
|
||||
```{r}
|
||||
|
||||
|
||||
(x <- 1:10)
|
||||
x[x > 6]
|
||||
|
||||
x[x < 3] <- 99
|
||||
x
|
||||
# which
|
||||
which(x > 10)
|
||||
which.max(x)
|
||||
which.min(x)
|
||||
|
||||
```
|
||||
|
||||
## 索引
|
||||
|
||||
### 列表
|
||||
|
||||
```{r}
|
||||
|
||||
|
||||
# 创建一个列表
|
||||
my_list <- list(fruit = c("apple", "banana", "cherry"),
|
||||
numbers = c(1, 2, 3, 4, 5))
|
||||
|
||||
# 访问列表中的第二个元素
|
||||
my_list[[2]]
|
||||
|
||||
```
|
||||
|
||||
## 索引
|
||||
|
||||
### 数据框
|
||||
|
||||
```{r}
|
||||
|
||||
# 创建一个数据框
|
||||
df <- data.frame(fruit = c("apple", "banana", "cherry"),
|
||||
quantity = c(5, 7, 3))
|
||||
|
||||
# 访问数据框中的第一个元素
|
||||
df[1, 1]
|
||||
# 第2-3行
|
||||
df[2:3, ]
|
||||
|
||||
```
|
||||
|
||||
## 日期和时间
|
||||
|
||||
### `base` package
|
||||
|
||||
|
||||
```{r}
|
||||
as.Date("2024-01-01")
|
||||
as.POSIXct(1)
|
||||
as.Date(c("12/6/2022", "1/1/2023"), format="%m/%d/%Y")
|
||||
```
|
||||
|
||||
|
||||
## 日期和时间
|
||||
|
||||
### `lubridate` package
|
||||
|
||||
|
||||
```{r}
|
||||
lubridate::today()
|
||||
|
||||
require(lubridate)
|
||||
now()
|
||||
ymd(c(20200321, 240404, "20181231"))
|
||||
mdy(c("3-10-1998", "01-17-2018", "Feb 3, 2024"))
|
||||
ymd_hms("1998-03-16 13:15:45", tz = "Asia/Shanghai")
|
||||
```
|
||||
|
||||
|
||||
## 日期和时间
|
||||
|
||||
### `lubridate` package
|
||||
|
||||
```{r}
|
||||
make_date(2028, 1, 30)
|
||||
as_date("2000-01-01")
|
||||
as_datetime("2000-01-01", tz = "Asia/Shanghai")
|
||||
as_datetime("2024-02-01 8:00:00", tz = "Asia/Shanghai")
|
||||
```
|
||||
|
||||
## 日期和时间
|
||||
|
||||
### `lubridate` package
|
||||
|
||||
```{r}
|
||||
|
||||
year(today())
|
||||
wday(today())
|
||||
hour(now())
|
||||
```
|
||||
|
||||
|
||||
## 日期和时间
|
||||
|
||||
### `lubridate` package
|
||||
|
||||
|
||||
```{r}
|
||||
(x <- now())
|
||||
floor_date(x, unit = "day")
|
||||
floor_date(x, unit = "hour")
|
||||
floor_date(x, unit = "10 minutes")
|
||||
ceiling_date(x, unit = "10 minutes")
|
||||
|
||||
```
|
||||
|
||||
## 因子(factor)
|
||||
|
||||
### Factor是什么?
|
||||
|
||||
- 在R中,Factor是用来表示分类数据的特殊数据类型。
|
||||
- 它将数据分成不同的水平(levels),每个水平代表了一个类别。
|
||||
|
||||
|
||||
## 因子(factor)
|
||||
|
||||
### 创建Factor
|
||||
|
||||
```{r}
|
||||
# 创建一个Factor
|
||||
gender <- factor(c("Male", "Female", "Female", "Male"))
|
||||
# 查看Factor的水平
|
||||
levels(gender)
|
||||
# 改变Factor的水平顺序
|
||||
gender <- factor(gender, levels = c("Female", "Male"))
|
||||
summary(gender) # 使用Factor进行分组
|
||||
as.numeric(gender) # 因子转换为纯粹的整数值
|
||||
as.character(gender) # 转为字符
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 因子(factor)
|
||||
|
||||
### Label of Factor
|
||||
|
||||
```{r}
|
||||
(x <- factor(1:12, label = month.abb))
|
||||
factor(x, levels = month.abb[c(2:12, 1)])
|
||||
```
|
||||
|
||||
### 分组
|
||||
|
||||
```{r}
|
||||
cut(1:20, breaks=c(0, 5, 10, 15, 18, 20))
|
||||
```
|
||||
|
||||
|
||||
## 矩阵
|
||||
|
||||
```{r}
|
||||
1:20
|
||||
(A <- matrix(1:20, nrow = 4, byrow = TRUE))
|
||||
(B <- matrix(1:20, nrow = 4, byrow = FALSE))
|
||||
nrow(A)
|
||||
ncol(B)
|
||||
```
|
||||
|
||||
## 矩阵
|
||||
### 高维矩阵
|
||||
|
||||
```{r}
|
||||
X <- array(1:12, dim = c(3, 2, 2))
|
||||
dim(C)
|
||||
X[1, , ]
|
||||
X[1, , 1]
|
||||
|
||||
```
|
||||
|
||||
## 矩阵
|
||||
|
||||
### `cbind`、`rbind`
|
||||
|
||||
```{r}
|
||||
cbind(X[1, , ], X[2, , ], X[3, , ])
|
||||
rbind(X[1, , ], X[2, , ], X[3, , ])
|
||||
|
||||
cbind(c(1,2), c(3,4), c(5,6))
|
||||
```
|
||||
|
||||
## 数据框(data frame)
|
||||
|
||||
**最主要的数据形式。**
|
||||
|
||||
```{r}
|
||||
# 创建数据框
|
||||
(df <- data.frame(
|
||||
Name = c("Alice", "Bob", "Charlie"),
|
||||
Age = c(25, 30, 35),
|
||||
Married = c(TRUE, FALSE, TRUE)
|
||||
))
|
||||
names(df)
|
||||
colnames(df)
|
||||
ncol(df); nrow(df)
|
||||
```
|
||||
|
||||
|
||||
## 数据框(data frame)
|
||||
|
||||
```{r}
|
||||
df[1, 1]
|
||||
df[2, ]
|
||||
df[, 1]
|
||||
df$Age
|
||||
df[["Age"]]
|
||||
df[, "Age"]
|
||||
```
|
||||
|
||||
## 数据框(data frame)
|
||||
|
||||
```{r}
|
||||
X <- matrix(1:9, nrow = 3)
|
||||
class(X)
|
||||
(Y <- as.data.frame(X))
|
||||
names(Y)
|
||||
names(Y) <- c("colA", "colB", "colC")
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
## 欢迎讨论!{.center}
|
||||
|
||||
|
||||
`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")`
|
|
@ -0,0 +1 @@
|
|||
../../_extensions
|
|
@ -0,0 +1,127 @@
|
|||
---
|
||||
title: "三、Excel基础"
|
||||
subtitle: 《区域水环境污染数据分析实践》<br>Data analysis practice of regional water environment pollution
|
||||
author: 苏命、王为东<br>中国科学院大学资源与环境学院<br>中国科学院生态环境研究中心
|
||||
date: today
|
||||
lang: zh
|
||||
format:
|
||||
revealjs:
|
||||
theme: dark
|
||||
slide-number: true
|
||||
chalkboard:
|
||||
buttons: true
|
||||
preview-links: auto
|
||||
lang: zh
|
||||
toc: true
|
||||
toc-depth: 1
|
||||
toc-title: 大纲
|
||||
logo: ./_extensions/inst/img/ucaslogo.png
|
||||
css: ./_extensions/inst/css/revealjs.css
|
||||
pointer:
|
||||
key: "p"
|
||||
color: "#32cd32"
|
||||
pointerSize: 18
|
||||
revealjs-plugins:
|
||||
- pointer
|
||||
filters:
|
||||
- d2
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
#| cache: false
|
||||
lang <- "cn"
|
||||
require(tidyverse)
|
||||
require(learnr)
|
||||
```
|
||||
|
||||
## Tidy data
|
||||
|
||||
由Hadley Wickham提出,tidy data 是一种结构化数据的组织方式,使得数据分析和可视化等操作更加简单、直观和有效。它有助于减少数据的混乱和复杂性,并促进数据的整洁性和易用性。
|
||||
|
||||
- 每个变量一列
|
||||
- 每个观察一行
|
||||
- 每个表单一个表
|
||||
|
||||
## Excel主要学习内容
|
||||
|
||||
- 常用函数
|
||||
- 数据筛选/排序
|
||||
- 条件格式化
|
||||
- 数据透视表/图
|
||||
|
||||
## 常用函数
|
||||
|
||||
### 引用位置
|
||||
|
||||
- 相对引用
|
||||
- 相对引用是默认的引用类型。
|
||||
- 当公式被复制到其他单元格时,引用的单元格会相对移动。
|
||||
|
||||
```
|
||||
=A1 # 在 B1 单元格中的公式,引用了 A1 单元格的值
|
||||
=B1+C1 # 在 D1 单元格中的公式,引用了 B1 和 C1 单元格的值
|
||||
```
|
||||
|
||||
### 绝对引用
|
||||
|
||||
- 绝对引用固定了单元格的地址,不会随公式的复制而改变。
|
||||
|
||||
```
|
||||
=$A$1 # 在 B1 单元格中的公式,始终引用 A1 单元格的值
|
||||
```
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- SUM:求和
|
||||
- AVERAGE:求平均值
|
||||
- MAX:求最大值
|
||||
- MIN:求最小值
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- COUNT:计数非空单元格
|
||||
- COUNTA:计数非空单元格(包括文本)
|
||||
- COUNTIF:根据条件计数
|
||||
- SUMIF:根据条件求和
|
||||
- AVERAGEIF:根据条件求平均值
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- VLOOKUP:垂直查找
|
||||
- HLOOKUP:水平查找
|
||||
- INDEX:返回指定位置的值
|
||||
- MATCH:查找值在区域中的位置
|
||||
- IF:条件判断函数
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- CONCATENATE:连接多个文本字符串
|
||||
- LEFT:提取文本左边的字符
|
||||
- RIGHT:提取文本右边的字符
|
||||
- MID:提取文本中间的字符
|
||||
- TEXT:将数值格式化为文本
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- ROUND:四舍五入到指定位数
|
||||
- ROUNDUP:向上取整
|
||||
- ROUNDDOWN:向下取整
|
||||
|
||||
|
||||
## 常用函数
|
||||
|
||||
- TODAY:返回当前日期
|
||||
- NOW:返回当前日期和时间
|
||||
- DATE:返回指定年、月、日的日期
|
||||
- TIME:返回指定小时、分钟、秒的时间
|
||||
|
||||
## 欢迎讨论!{.center}
|
||||
|
||||
|
||||
`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")`
|
|
@ -0,0 +1 @@
|
|||
../../_extensions
|
|
@ -0,0 +1,83 @@
|
|||
---
|
||||
title: "课后作业6"
|
||||
subtitle: 《区域水环境污染数据分析实践》<br>Data analysis practice of regional water environment pollution
|
||||
author: 苏命、王为东<br>中国科学院大学资源与环境学院<br>中国科学院生态环境研究中心
|
||||
date: today
|
||||
lang: zh
|
||||
format:
|
||||
revealjs:
|
||||
theme: dark
|
||||
slide-number: true
|
||||
chalkboard:
|
||||
buttons: true
|
||||
preview-links: auto
|
||||
lang: zh
|
||||
toc: true
|
||||
toc-depth: 1
|
||||
toc-title: 大纲
|
||||
logo: ./_extensions/inst/img/ucaslogo.png
|
||||
css: ./_extensions/inst/css/revealjs.css
|
||||
pointer:
|
||||
key: "p"
|
||||
color: "#32cd32"
|
||||
pointerSize: 18
|
||||
revealjs-plugins:
|
||||
- pointer
|
||||
filters:
|
||||
- d2
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
#| cache: false
|
||||
lang <- "cn"
|
||||
require(tidyverse)
|
||||
require(learnr)
|
||||
```
|
||||
|
||||
## [第6次课后作业](第6次课后作业_模板.html)
|
||||
|
||||
1. 如何在 R 中将数字 10 赋值给变量 x?
|
||||
2. 在 R 中,如何创建一个包含数字 1 到 5 的向量?
|
||||
3. 编写一个条件语句,如果变量 age 大于等于 18,则打印 "成年人",否则打印 "未成年人"。
|
||||
4. 使用 for 循环打印从 1 到 10 的整数。
|
||||
5. 编写一个名为 addition 的函数,接受两个参数 a 和 b,返回它们的和。
|
||||
6. 创建一个列表,包含三个元素:一个数字向量、一个字符向量和一个逻辑向量。
|
||||
7. 使用 read.csv() 函数读取名为 data.csv 的 CSV 文件,并将数据存储在一个名为 data 的数据框中。
|
||||
8. 从数据框中选择前五行,并将结果存储在一个新的数据框中。
|
||||
9. 将字符串 "hello world" 转换为大写。
|
||||
10. 从数据框中选择 score 列大于等于 90 的行。
|
||||
|
||||
## **data.csv**内容
|
||||
|
||||
```
|
||||
name,age,score
|
||||
Alice,25,85
|
||||
Bob,30,92
|
||||
Charlie,28,89
|
||||
David,22,95
|
||||
Eva,35,87
|
||||
Frank,27,91
|
||||
Grace,29,88
|
||||
Helen,26,93
|
||||
Ivan,31,86
|
||||
Jack,24,94
|
||||
Kelly,32,89
|
||||
Lily,28,90
|
||||
Mike,33,85
|
||||
Nancy,27,92
|
||||
Olivia,34,88
|
||||
Peter,29,93
|
||||
Queen,25,89
|
||||
Ryan,30,94
|
||||
Samantha,26,91
|
||||
Tom,31,87
|
||||
|
||||
```
|
||||
|
||||
|
||||
## 欢迎讨论!{.center}
|
||||
|
||||
|
||||
`r rmdify::slideend(wechat = FALSE, type = "public", tel = FALSE, thislink = "https://drwater.rcees.ac.cn/course/public/RWEP/@PUB/SD/")`
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
title: 课后作业6
|
||||
author: 姓名
|
||||
format: html
|
||||
---
|
||||
|
||||
|
||||
# 示例问题,在R中输出`1+2+3+...+100`的结果
|
||||
|
||||
采用`for`循环完成,代码如下:
|
||||
|
||||
```{r}
|
||||
total <- 0
|
||||
for (i in 1:100) {
|
||||
total <- total + i
|
||||
}
|
||||
total
|
||||
```
|
||||
|
||||
|
||||
# 如何在 R 中将数字 10 赋值给变量 x?
|
||||
|
||||
|
||||
# 在 R 中,如何创建一个包含数字 1 到 5 的向量?
|
||||
|
||||
# 编写一个条件语句,如果变量 age 大于等于 18,则打印 "成年人",否则打印 "未成年人"。
|
||||
|
||||
# 使用 for 循环打印从 1 到 10 的整数。
|
||||
|
||||
# 编写一个名为 addition 的函数,接受两个参数 a 和 b,返回它们的和。
|
||||
|
||||
# 创建一个列表,包含三个元素:一个数字向量、一个字符向量和一个逻辑向量。
|
||||
|
||||
# 使用 read.csv() 函数读取名为 data.csv 的 CSV 文件,并将数据存储在一个名为 data 的数据框中。
|
||||
|
||||
# 从数据框中选择前五行,并将结果存储在一个新的数据框中。
|
||||
|
||||
# 将字符串 "hello world" 转换为大写。
|
||||
|
||||
# 从数据框中选择 score 列大于等于 90 的行。
|
||||
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
subtitle: "课件"
|
||||
---
|
||||
|
||||
```{r}
|
||||
#| include: false
|
||||
require(drwateR)
|
||||
require(rmdify)
|
||||
rmdify::rmd_init()
|
||||
knitr::opts_chunk$set(echo = TRUE)
|
||||
```
|
||||
|
||||
```{r}
|
||||
#| output: asis
|
||||
#| echo: false
|
||||
#| message: false
|
||||
|
||||
data.frame(fd = dir(".", pattern = "[-_]")) |>
|
||||
dplyr::filter(!grepl("_files", fd)) |>
|
||||
dplyr::mutate(fn = purrr::map_chr(fd, ~ file.path(.x, dir(.x,
|
||||
pattern = "index.qmd|index.html"))[1])) |>
|
||||
dplyr::transmute(htmlstr = purrr::map2_chr(fn, fd, ~ paste0("## [", .y, "](", .x, ")\n\n",
|
||||
ifelse(!grepl("qmd$", .x), "",
|
||||
paste0("<iframe title='",
|
||||
gsub("^.*[_-]([^\\/]*)\\/.*$", "\\1", .x),
|
||||
"' width=800 height=600 src = '",
|
||||
gsub("qmd$", "html", .x),
|
||||
"'></iframe>\n\n"))))) |>
|
||||
dplyr::pull(htmlstr) |>
|
||||
paste(collapse = "") |>
|
||||
cat()
|
||||
```
|
Loading…
Reference in New Issue