我试图为一些ggplot2图形编写一个包装器,并尝试使用省略号'使功能灵活。我想保存用户(n = 1 me!)不必显式传递轴标题,因此可以解析...
参数并适当设置轴标题。我已经在几个Stackoverflow线程(e.g. 1,e.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 Vignette和lazyeeval vignette来学习/指导我(以及SO上的各种线程),但在尝试挑选时却步履蹒跚省略号(...
)中的特定变量传递给我正在制作的ggplot调用。
下行是工作需要的结果,并且没有足够的时间来学习/改进我们的编码实践,所以我将转而使用标准Evaulation,并在未来正确理解非标准评估。