R 数据处理 —— glue

前言

今天我们要介绍的是 tidyverse 中格式化字符串的软件包:glue

glue 提供了轻巧、快速和无依赖的可解释字符串,glue 通过将 R 表达式嵌入到花括号中,然后对其求值并将其插入字符串中。

安装

install.packages("glue")
# or
install.packages("glue")
# install.packages("devtools")
devtools::install_github("tidyverse/glue")

使用

1. 导入
library(glue)
2. 简单使用

将变量直接传递到字符串中

> name <- "Fred"
> glue('My name is {name}.')
My name is Fred.

通过将变量名放置在一对花括号之间,glue 会将变量名替换为相应的值

字符串可以写成多行的形式,最后会自动将这些行连接起来

> name <- "Fred"
> age <- 50
> anniversary <- as.Date("1991-10-12")
> glue('My name is {name},',
+      ' my age next year is {age + 1},',
+      ' my anniversary is {format(anniversary, "%A, %B %d, %Y")}.')
My name is Fred, my age next year is 51, my anniversary is 星期六, 十月 12, 1991.

glue 中使用命名参数来指定临时变量

> glue('My name is {name},',
+      ' my age next year is {age + 1},',
+      ' my anniversary is {format(anniversary, "%A, %B %d, %Y")}.',
+      name = "Joe",
+      age = 40,
+      anniversary = as.Date("2001-10-12"))
My name is Joe, my age next year is 41, my anniversary is 星期五, 十月 12, 2001.
3. glue_data 搭配管道符

glue_data() 搭配管道符非常有用

> head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

> head(mtcars) %>% glue_data("{rownames(.)} has {hp} hp")
Mazda RX4 has 110 hp
Mazda RX4 Wag has 110 hp
Datsun 710 has 93 hp
Hornet 4 Drive has 110 hp
Hornet Sportabout has 175 hp
Valiant has 105 hp

也可以搭配 dplyr 使用

> head(iris) %>%
+     mutate(description = glue("This {Species} has a petal length of {Petal.Length}"))
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species                           description
1          5.1         3.5          1.4         0.2  setosa This setosa has a petal length of 1.4
2          4.9         3.0          1.4         0.2  setosa This setosa has a petal length of 1.4
3          4.7         3.2          1.3         0.2  setosa This setosa has a petal length of 1.3
4          4.6         3.1          1.5         0.2  setosa This setosa has a petal length of 1.5
5          5.0         3.6          1.4         0.2  setosa This setosa has a petal length of 1.4
6          5.4         3.9          1.7         0.4  setosa This setosa has a petal length of 1.7
4. 字符串

前导空格和第一行以及最后一行的换行符会自动被修剪

> glue("
+     A formatted string
+     Can have multiple lines
+       with additional indention preserved
+     ")
A formatted string
Can have multiple lines
  with additional indention preserved

可以在首行或尾行多添加一个换行符来实现空行

> glue("
+ 
+   leading or trailing newlines can be added explicitly
+ 
+   ")

leading or trailing newlines can be added explicitly

在行尾使用 \\ 可以将两行合并

> glue("
+     A formatted string \\
+     can also be on a \\
+     single line
+     ")
A formatted string can also be on a single line

如果要字符串中使用花括号,需要使用双花括号

> name <- "Fred"
> glue("My name is {name}, not {{name}}.")
My name is Fred, not {name}.

注意:请对比下面的区别

> a <- "foo"

> glue("{{a}}")
{a}

> glue("{{a} }")
{a} }

> glue("{ {a} }")
foo

> glue("{
+   a
+ }")
foo

> glue("{
+   {a}
+ }")
foo

> glue("{
+   {a}}")
foo

双花括号需要连用

可以使用 + 连接字符串

> x <- 1
> y <- 3
> glue("x + y") + " = {x + y}"
x + y = 4
5. 指定分隔符

glue 默认将花括号之间的字符作为变量名或者表达式,我们可以通过设置 .open 和 .close 参数来指定分隔符

> one <- "1"
> glue("The value of $e^{2\\pi i}$ is $<<one>>$.", .open = "<<", .close = ">>")
The value of $e^{2\pi i}$ is $1$.
6. SQL 语句

glue 还提供了 glue_sql 函数,用于格式化 SQL 语句,例如

> con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
> colnames(iris) <- gsub("[.]", "_", tolower(colnames(iris)))
> DBI::dbWriteTable(con, "iris", iris)
> var <- "sepal_width"
> tbl <- "iris"
> num <- 2
> val <- "setosa"
> glue_sql("
+   SELECT {`var`}
+   FROM {`tbl`}
+   WHERE {`tbl`}.sepal_length > {num}
+     AND {`tbl`}.species = {val}
+   ", .con = con)
<SQL> SELECT `sepal_width`
FROM `iris`
WHERE `iris`.sepal_length > 2
  AND `iris`.species = 'setosa'

还可以配合 DBI::dbBind() 进行参数化查询

> sql <- glue_sql("
+     SELECT {`var`}
+     FROM {`tbl`}
+     WHERE {`tbl`}.sepal_length > ?
+   ", .con = con)
> query <- DBI::dbSendQuery(con, sql)
> DBI::dbBind(query, list(num))
> DBI::dbFetch(query, n = 4)
  sepal_width
1         3.5
2         3.0
3         3.2
4         3.1

还支持更复杂的查询,比例嵌套子查询

> sub_query <- glue_sql("
+   SELECT *
+   FROM {`tbl`}
+   ", .con = con)
> 
> glue_sql("
+   SELECT s.{`var`}
+   FROM ({sub_query}) AS s
+   ", .con = con)
<SQL> SELECT s.`sepal_width`
FROM (SELECT *
FROM `iris`) AS s

还可以在 IN 声明之后添加 * 来接受多个值

> glue_sql("SELECT * FROM {`tbl`} WHERE sepal_length IN ({vals*})",
+          vals = 1, .con = con)
<SQL> SELECT * FROM `iris` WHERE sepal_length IN (1)
> glue_sql("SELECT * FROM {`tbl`} WHERE sepal_length IN ({vals*})",
+          vals = 1:5, .con = con)
<SQL> SELECT * FROM `iris` WHERE sepal_length IN (1, 2, 3, 4, 5)
> glue_sql("SELECT * FROM {`tbl`} WHERE species IN ({vals*})",
+          vals = "setosa", .con = con)
<SQL> SELECT * FROM `iris` WHERE species IN ('setosa')
> glue_sql("SELECT * FROM {`tbl`} WHERE species IN ({vals*})",
+          vals = c("setosa", "versicolor"), .con = con)
<SQL> SELECT * FROM `iris` WHERE species IN ('setosa', 'versicolor')
7. 字符串向量的折叠

可以使用 glue_collapse 将任意长度的字符串向量折叠为长度为 1 的字符串向量

glue_collapse(x, sep = "", width = Inf, last = "")
  • x :字符串向量

  • sep :用来分隔向量中元素的字符串

  • width :折叠之后加上 ... 之后的最大长度,

  • last : 如果 x 至少有 2 个元素,则用于分隔最后两个元素的字符串

> glue_collapse(glue("{1:10}"))
12345678910
> glue_collapse(glue("{1:10}"), width = 7)
1234...
> glue_collapse(1:4, ", ", last = " and ")
1, 2, 3 and 4
8. 单个元素的引用

下面三个对单个元素引用函数可以搭配 glue_collapse 使用

  • single_quote(x):用单引号包裹字符串元素
  • double_quote(x):用双引号包裹字符串元素
  • backtick(x):用反引号包裹字符串元素
> glue('Values of x: {glue_collapse(backtick(x), sep = ", ", last = " and ")}')
Values of x: `1`, `2`, `3`, `4` and `5`
> glue('Values of x: {glue_collapse(single_quote(x), sep = ", ", last = " and ")}')
Values of x: '1', '2', '3', '4' and '5'
> glue('Values of x: {glue_collapse(double_quote(x), sep = ", ", last = " and ")}')
Values of x: "1", "2", "3", "4" and "5"
9. 为输出着色

glue 可以搭配 crayon 包定义的一些用于终端输出着色的函数,来为我们的输出文本着色

先导入 crayon

> require(crayon)

glue 提供了 glue_col()glue_data_col() 两个着色函数

image.png

我们可以设置白底黑字

> white_on_grey <- bgBlack $ white
> glue_col("{white_on_grey
+     Roses are {red {colors()[[552]]}}
+     Violets are {blue {colors()[[26]]}}
+     `glue_col()` can show {red c}{yellow o}{green l}{cyan o}{blue r}{magenta s}
+     and {bold bold} and {underline underline} too!
+     }")

image.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: GLUE(General Language Understanding Evaluation)任务数据集是一个被广泛应用于自然语言处理(NLP)任务评估的标准数据集。它由来自9个不同任务的多个数据集组成,包括情感分类、自然语言推理、命名实体识别等任务。GLUE任务数据集的格式一般如下: 1. 训练集(Training set):用于训练模型的数据集。通常包含大量的语言样本,包括输入句子及其对应的标签或目标。 2. 验证集(Validation set):用于在训练过程中评估模型性能的数据集。通常由从训练集中划分出的一部分样本组成,不参与训练过程,用于调整模型的超参数或进行早期停止等。 3. 测试集(Test set):用于最终评估模型性能的数据集。通常由不参与模型训练和验证的样本组成。在完成模型训练和调参后,使用测试集对模型进行评估,以了解模型的泛化能力和性能。 对于每个任务,GLUE数据集一般包括输入句子或文本数据,以及对应的标签或目标。例如,对于情感分类任务,输入句子是一个句子或文本段落,标签是该文本的情感类别,如正面、负面或中性。 在进行实验或研究时,我们可以使用GLUE数据集进行模型训练、验证和测试,以评估模型在各种NLP任务上的效果。通过对不同任务之间的性能进行比较,可以帮助我们了解和改进模型在不同语义理解任务上的表现,并推动NLP研究和应用的发展。 ### 回答2: GLUE是指General Language Understanding Evaluation,在自然语言处理领域广泛使用的一个基准任务。GLUE任务数据集格式指的是参与GLUE任务的数据集的数据格式要求。 GLUE任务数据集的格式要求如下: 1. 数据集应具有统一的标注格式:数据集中的语料需要按照一致的格式进行标注,以保证不同任务之间的可比性。 2. 输入格式要求:对于多项选择问题的任务,输入数据集应以问题和选项的形式提供。对于分类任务,输入数据集应以文本对或者单个句子的形式提供。 3. 标签格式要求:数据集中每个样本都应标注有相应的标签,用于指示样本所属的类别或是正确的答案。 4. 样本分割要求:数据集应以训练集、开发集和测试集的形式划分,并按照一定比例划分样本。常见的划分比例是70%的训练集、10%的开发集和20%的测试集。 5. 数据集质量要求:数据集应具有高质量的标注和丰富的样本。标注应准确无误,样本应能够涵盖各种语言结构和语义。 6. 数据集大小要求:数据集的规模应足够大,以确保模型能够充分学习和泛化。通常来说,数据集的大小应在几千到几百万条之间。 总之,GLUE任务数据集格式要求数据集的标注、格式、分割和质量都要符合一定的标准,以保证不同任务之间的可比性和模型的准确性和泛化性。 ### 回答3: GLUE(General Language Understanding Evaluation)任务数据集是一个广泛使用的自然语言处理数据集,旨在评估和比较不同模型在各种语言理解任务上的性能。它包含了9个不同的任务,包括自然语言推断、句子对匹配、情感分类等。 GLUE任务数据集的格式可以分为输入和输出两个部分。输入部分通常由两个文本序列组成,例如问题和答案、句子1和句子2等。而输出部分通常是一个标签,表示对应的任务类别。不同的任务可能有不同的标签集,例如True/False表示推断任务中的正确与错误,Positive/Negative表示情感分类任务中的积极与消极等。 在处理GLUE任务数据集时,我们通常需要使用机器学习模型来学习输入文本序列之间的关系,并进行相应的分类、匹配或预测。模型可以利用双向Transformer架构等深度学习方法来提取输入文本的语义信息,并通过训练来优化模型参数。 为了评估模型在GLUE任务数据集上的性能,我们可以使用各种评估指标,例如准确率、精确率、召回率、F1分数等。这些指标可以帮助我们比较不同模型的表现,并选择最优的模型进行进一步应用和研究。 总而言之,GLUE任务数据集提供了一个标准的、多样化的自然语言理解评估平台,帮助研究人员和开发者进行模型的训练和性能比较。通过合理利用这些数据集和方法,我们可以不断推动自然语言处理技术的发展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

名本无名

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值