本篇来介绍一个并不是很常用的功能——胶水函数glue()
,它来自glue
工具包,属于tidyverse
系列(https://glue.tidyverse.org/)。
library(glue)
比如,有如下包含两个变量的数据框:
dta <- data.frame(name = c("张三", "李四", "王五"),
age = c(24, 27, 22))
dta
## name age
## 1 张三 24
## 2 李四 27
## 3 王五 22
使用胶水函数可以实现以下功能:
library(tidyverse)
library(magrittr)
dta %<>%
mutate(intro = glue(
"我的名字叫{name},我今年{age}岁了"
))
dta$intro
## 我的名字叫张三,我今年24岁了
## 我的名字叫李四,我今年27岁了
## 我的名字叫王五,我今年22岁了
通过上述例子,相信各位读者已经能够理解胶水函数的基本功能和用法了。
胶水函数还有如下几个变体:
glue_col()
函数可以调整字体的格式
library(crayon)
dta %<>%
mutate(intro = glue_col(
"我的名字叫{red {name}},我今年{italic {age}}岁了"
))
dta$intro

glue_collapse()
针对向量使用
comb <- glue_collapse(dta$name, sep = ",", last = "和")
comb
## 张三,李四和王五
glue("参加此次活动的有{comb}等{length(dta$name)}位同学")
## 参加此次活动的有张三,李四和王五等3位同学
上例还展现了胶水函数的一个功能,即可以实现在字符串中运行函数。这里再单独将其拿出来对比一下:
"{length(dta$name)}"
## [1] "{length(dta$name)}"
glue("{length(dta$name)}")
## 3
胶水函数除了使用大括号"{}"外,还可以进行自定义。它的完整语法结构如下:
glue(
...,
.sep = "",
.envir = parent.frame(),
.open = "{",
.close = "}",
.na = "NA",
.transformer = identity_transformer,
.trim = TRUE
)
通过.open
和.close
两个参数可以自定义起始和结束符号,举例如下:
dta %<>%
mutate(intro = glue(
"我的名字叫{<name>},我今年{<age>}岁了",
.open = "<", .close = ">"
))
dta$intro
## 我的名字叫{张三},我今年{24}岁了
## 我的名字叫{李四},我今年{27}岁了
## 我的名字叫{王五},我今年{22}岁了