【问题标题】:Creating a function which creates a vector without needing quotation marks for strings创建一个函数,该函数创建一个向量而不需要字符串的引号
【发布时间】:2019-12-08 01:13:47
【问题描述】:

我知道dplyr select 能够使用不带引号的列名对数据集进行子集化:

function (.data, ...) 
{
    UseMethod("select")
}

我想做类似的事情,但我希望函数创建一个向量,而不是子集。比如:

var_select <- function (...) {
    UseMethod("select")
}
vector  <-var_select(cyl, disp, hp)
> vector
[1] "cyl"  "disp" "hp"

正确的语法是什么?

【问题讨论】:

    标签: r function vector


    【解决方案1】:

    可能是这样的:

    foo <- function(...){
      as.character(as.list(match.call()[-1L]))
    }
    
    > foo(a,b,c)
    [1] "a" "b" "c"
    

    【讨论】:

      【解决方案2】:

      deparse() 可能比as.character() 更安全一些,也许使用... 而不是调用本身更清楚一些,我们会得到:

      v <- function(...){
        sapply(eval(substitute(alist(...))), deparse)
      }
      v(a,b,list(1))
      #> [1] "a"       "b"       "list(1)"
      

      【讨论】:

        【解决方案3】:
        foo = function(...){
            unname(sapply(rlang::enexprs(...), as.character))
        }
        foo(cyl, disp, hp)
        #[1] "cyl"  "disp" "hp" 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-02-16
          • 2020-04-22
          • 2016-08-18
          • 1970-01-01
          • 2018-12-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多