是否可以使用包含字符向量(字符串)的变量来命名 tibble 的列?
Is it possible to name a column of a tibble using a variable containing a character vector (string)?
有没有办法使用变量来命名 tibble 的列?例如,我想命名 Clade
下面的第一列。我尝试了 paste()
和 assign()
,但这两个函数似乎都无法满足我的要求。
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"
metaDF = tibble(CLADE_FIELD = c("G"),
LINEAGE_FIELD = c("B.666"),
"Submission date" = c("2020-03"))
我在单元测试中使用此代码,这就是我人为创建此 tibble 的原因。该名称引用了 csv 中的列名,如果此列名更改,我希望代码易于维护。
您可以使用以下解决方案:
- 为了将可变的列名存储为字符串,我们使用了 bang bang 运算符
!!
,它强制对它进行后续 name 的评估
- 我们还需要使用 walrus
:=
而不是 =
,后者是等价的,并会提示您在其上提供名称(就像我们的变量名称一样)LHS(左侧)
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"
metaDF = tibble(!!CLADE_FIELD := c("G"),
!!LINEAGE_FIELD := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03
或者我们可以使用双大括号{{}}
如下:
metaDF = tibble({{CLADE_FIELD}} := c("G"),
{{LINEAGE_FIELD}} := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03
或者我们可以使用 glue
语法,将变量名放在一对大括号 {}
中,并将结果作为字符串传递。由于胶水语法在 :=
的 LHS 上可用,因此您放在花括号中的任何对象(这里是您的变量名)都将被评估为 R 代码:
metaDF = tibble("{CLADE_FIELD}" := c("G"),
"{LINEAGE_FIELD}" := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03
有没有办法使用变量来命名 tibble 的列?例如,我想命名 Clade
下面的第一列。我尝试了 paste()
和 assign()
,但这两个函数似乎都无法满足我的要求。
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"
metaDF = tibble(CLADE_FIELD = c("G"),
LINEAGE_FIELD = c("B.666"),
"Submission date" = c("2020-03"))
我在单元测试中使用此代码,这就是我人为创建此 tibble 的原因。该名称引用了 csv 中的列名,如果此列名更改,我希望代码易于维护。
您可以使用以下解决方案:
- 为了将可变的列名存储为字符串,我们使用了 bang bang 运算符
!!
,它强制对它进行后续 name 的评估
- 我们还需要使用 walrus
:=
而不是=
,后者是等价的,并会提示您在其上提供名称(就像我们的变量名称一样)LHS(左侧)
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"
metaDF = tibble(!!CLADE_FIELD := c("G"),
!!LINEAGE_FIELD := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03
或者我们可以使用双大括号{{}}
如下:
metaDF = tibble({{CLADE_FIELD}} := c("G"),
{{LINEAGE_FIELD}} := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03
或者我们可以使用 glue
语法,将变量名放在一对大括号 {}
中,并将结果作为字符串传递。由于胶水语法在 :=
的 LHS 上可用,因此您放在花括号中的任何对象(这里是您的变量名)都将被评估为 R 代码:
metaDF = tibble("{CLADE_FIELD}" := c("G"),
"{LINEAGE_FIELD}" := c("B.666"),
"Submission date" = c("2020-03"))
# A tibble: 1 x 3
Clade Lineage `Submission date`
<chr> <chr> <chr>
1 G B.666 2020-03