【问题标题】:R: Vectorize deparse(substitute(x))R:向量化去解析(替代(x))
【发布时间】:2020-03-02 18:25:35
【问题描述】:

我想矢量化deparse(substitute(x))

f <- function(...){
deparse(substitute(...))
}

f(a, b, c)

这仅给出第一个元素"a",但我等待"a", "b", "c"。偶然发现了这个

f2 <- function(...){
deparse(substitute(...()))
}
f2(ab, b, c)

这给出了"pairlist(ab, b, c)"。现在我可以删除所有我不需要获取"a", "b", "c" 的东西。但这对我来说似乎并不优雅。有没有办法向量化 deparse(substitute(x))?

我知道有一个question 有类似的问题,但答案不包括deparse(substitute(x))

【问题讨论】:

    标签: r parsing vectorization


    【解决方案1】:

    match.call 是一个很好的起点。我鼓励你去探索你能用它做的所有事情。我相信这可以让你到达你想要的地方:

    f <- function(...){
        as.character(match.call(expand.dots = FALSE)[[2]])
    }
    

    还有一个使用它的例子……

    f(hey, you)
    [1] "hey" "you"
    

    【讨论】:

      【解决方案2】:

      我们可以使用match.call

      f <- function(...) sapply(as.list(match.call())[-1], as.character)
      f(a)
      #[1] "a"
      f(a, b)
      #[1] "a" "b"
      f(a, b, c)
      #[1] "a" "b" "c"
      

      或使用substitute

      f <- function(...) sapply(substitute(...()), deparse)
      f(a)
      #[1] "a"
      f(a, b)
      #[1] "a" "b"
      f(a, b, c)
      #[1] "a" "b" "c"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多