how to create a quoted expression from strings

后端 未结 3 928
遥遥无期
遥遥无期 2021-01-31 12:27

Given a vector of strings, I would like to create an expression without the quotation marks.

# eg, I would like to go from 
c(\"string1\", \"string2\")

# to...         


        
3条回答
  •  醉话见心
    2021-01-31 12:49

    Here is what I'd do:

    ## Create an example of a data.table "dt" whose columns you want to index 
    ## using a character vector "xx"
    library(data.table)
    dt <- data.table(mtcars)
    xx <- c("wt", "mpg")
    
    ## Construct a call object identical to that produced by quote(list("wt", "mpg"))
    jj <- as.call(lapply(c("list", xx), as.symbol))
    
    ## Try it out
    dt[1:5,eval(jj)]
    #       wt  mpg
    # 1: 2.620 21.0
    # 2: 2.875 21.0
    # 3: 2.320 22.8
    # 4: 3.215 21.4
    # 5: 3.440 18.7
    

    When "computing on the language" like this, it's often helpful to have a look at the structure of the object you're trying to construct. Based on the following (and once you know about as.call() and as.symbol()), creating the desired language object becomes a piece of cake:

    x <- quote(list(wt, mpg))
    
    str(x)
    #  language list(wt, mpg)
    
    class(x)
    # [1] "call"
    
    str(as.list(x))
    # List of 3
    #  $ : symbol list
    #  $ : symbol wt
    #  $ : symbol mpg
    

提交回复
热议问题