解析省略号参数

时间:2017-02-28 14:36:23

标签: r ellipsis

我试图为一些ggplot2图形编写一个包装器,并尝试使用省略号&#39;使功能灵活。我想保存用户(n = 1 me!)不必显式传递轴标题,因此可以解析...参数并适当设置轴标题。我已经在几个Stackoverflow线程(e.g. 1e.g. 2甚至是R Documentation)中读取了省略号参数可以使用args <- list(...)转换为列表所以已经被淘汰了一个简化的例子......

test <- function(...){
    args <- list(...)
    is.list(args) %>% print()
    if(grepl('a', args)){
        title <- 'A'
    }
    else if(grepl('b', args)){
        title <- 'B'
    }
    return(title)
}

测试函数我在提供单个a作为参数时得到的结果......

> test(a)
[1] TRUE
[1] "A"

但是当我尝试通过省略号传递包括多个参数在内的其他参数时,我不明白发生了什么。一个非a参数

> test(b)
Error in test(b) (from #2) : object 'b' not found

...然后第一个参数为a,辅助参数为......

> test(a, c, d)
Error in test(a, c, d) (from #2) : object 'd' not found
首先是

...或非a,但是应该匹配的更远的内容......

> test(c, b, d)
Error in test(c, b, d) (from #2) : object 'b' not found

问题出现在args <- list(...),因为查看args列表的逻辑测试是否打印出来,但这并不符合我的要求。已阅读list(...)确实(将省略号参数转换为列表)。我希望我可能需要使用像args <- list(...) %>% unlist()这样的东西来将列表转换为一个向量,然后可以在grepl()中用作参数(并且实际上已经尝试了但是据我所知错误发生在if()之前,但我不明白最新情况,并会对任何解释感激不尽。

编辑:

根据评论,我认为这是我自己创作的一个问题,因为我混合了标准和非标准评估。我一直在尝试为ggplot2编写一个包装器,并且一直在使用NSE Vignettelazyeeval vignette来学习/指导我(以及SO上的各种线程),但在尝试挑选时却步履蹒跚省略号(...)中的特定变量传递给我正在制作的ggplot调用。

下行是工作需要的结果,并且没有足够的时间来学习/改进我们的编码实践,所以我将转而使用标准Evaulation,并在未来正确理解非标准评估。

0 个答案:

没有答案