Reputation: 175
Is there a way to name the column of a tibble using a variable? I want to name the first column below Clade
for example. I tried paste()
and assign()
, but neither function seems to do what I want.
CLADE_FIELD = "Clade"
LINEAGE_FIELD = "Lineage"
metaDF = tibble(CLADE_FIELD = c("G"),
LINEAGE_FIELD = c("B.666"),
"Submission date" = c("2020-03"))
I am using this code in a unit test which is why I am creating this tibble artificially. The name references a column name in a csv and I want the code to be easily maintainable if this column name changes.
Upvotes: 5
Views: 3372
Reputation: 21938
You can use the following solution:
!!
which forces the evaluation of it succeeding name:=
instead of =
which are equivalent and prompts you to supply name (as is the case with our variable name) on it LHS (left hand side)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
Or we can use double braces {{}}
as follows:
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
Or we can make use of glue
syntax and put the variable name within a pair of braces {}
and pass the result as a string. Since glue syntax became available on the LHS of :=
whatever object (here your variable names) you put within a curly braces will be evaluated as R code:
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
Upvotes: 11