【问题标题】:Extract names of dataframes passed with dots提取用点传递的数据帧的名称
【发布时间】:2016-05-20 22:41:42
【问题描述】:

可以像这个函数一样使用deparse(substitute())组合提取函数内部的参数名

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

data(iris)
data(swiss)

names_from_dots(iris)
#[1] "iris"
names_from_dots(swiss)
#[1] "swiss"

提取在...(点)参数中传递的data.frame的名称。

但是如何提取传递的多个 data.frames 的每个名称

names_from_dots(swiss, iris)
[1] "swiss"
names_from_dots(iris, swiss)
[1] "iris"

当这只返回第一个对象的名称时。

【问题讨论】:

    标签: r ellipsis


    【解决方案1】:

    我根本不会在这里使用substitute,它与...1 的效果很差。相反,您可以使用以下方法捕获未评估的点:

    dots = match.call(expand.dots = FALSE)$...
    

    然后你可以得到点内的参数:

    sapply(dots, deparse)
    

    1 我认为,部分原因是substitute 在使用 (a) 参数(这是一个“承诺”对象)或 (b) 另一个参数调用时会做完全不同的事情目的。 ... 介于这两者之间。

    【讨论】:

      【解决方案2】:

      您可以尝试以下方法:

      names_from_dots <- function(...) sapply(substitute(list(...))[-1], deparse)
      
      names_from_dots(swiss, iris)
      # [1] "swiss" "iris" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-03
        • 2015-03-07
        • 2012-09-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多