rr-glue

Glue inside a glue R


I would like to use a glue inside a glue. Here I created a simple reproducible example:

library(glue)
l <- c("a", "b", "c")
input = list(a = "test1",
             b = "test2",
             c = "test3")

for (i in l) {
  print(glue("{input${i}}"))
}
#> Error:
#> ! Failed to parse glue component
#> Caused by error in `parse()`:
#> ! <text>:1:7: unexpected '{'
#> 1: input${
#>           ^

Created on 2024-08-05 with reprex v2.1.0

This returns an error because we want to use a curly brace inside a curly brace. My expected output should look like this:

test1
test2
test3

Because I would like the glue to look use the letters from the vector l to print the values mentioned in the list input. This is basically input$a returns test1.

So I was wondering if it is possible to use glue inside a glue in R?


Solution

  • This is classic R way of selecting columns from a dataframe (or a list in this case). Dynamically select data frame columns using $ and a character value

    input[l] would give you l elements of input.

    input[l]
    #$a
    #[1] "test1"
    
    #$b
    #[1] "test2"
    
    #$c
    #[1] "test3"
    

    Or in the for loop use [[]] to select individual elements.

    for (i in l) {
      print(glue("{input[[i]]}"))
    }
    
    #test1
    #test2
    #test3