是否可以使用包含字符向量(字符串)的变量来命名 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