R:sprintf混合类型变量列表

R:sprintf混合类型变量列表,r,R,我试图用sprintf生成一个包含多个嵌入变量的SQL查询 我将参数为%s的SQL(很大)存储为一个单独的文件,然后从r中读取它。为了提高可读性,我创建了一个助手: fillSQLQuery <- function(query, params){ #' fill query with params do.call(sprintf, as.list(c(query, params))) } 到目前为止,我发现解决这个问题的唯一方法是事先手动将日期和类型转换为字符。然而,我想知道是否

我试图用sprintf生成一个包含多个嵌入变量的SQL查询

我将参数为
%s
的SQL(很大)存储为一个单独的文件,然后从r中读取它。为了提高可读性,我创建了一个助手:

fillSQLQuery <- function(query, params){
  #' fill query with params
  do.call(sprintf, as.list(c(query, params)))
}
到目前为止,我发现解决这个问题的唯一方法是事先手动将日期和类型转换为字符。然而,我想知道是否有任何“清晰”的方法可以做到这一点,像蟒蛇一样简单而健壮:

'query {p1}, {p2}'.format(p1=X, p2=Y)

好的,您还没有提供一个可复制的示例,但您的意图是明确的,因此这里是您应该提供的代码,以使其成为一个很好的示例(自包含且可复制):

现在,设置已经建立,我们可以研究解决方案。
列表
是存放不同类别物品的自然结构:

params = list(x1, x2, x3, x4)
在使用
sprintf
之前,我们可以修改您的函数,将每个列表元素转换为
character

fillSQLQuery = function(query, params){
  params = lapply(params, as.character)
  do.call(sprintf, c(query, params))
}

fillSQLQuery(qry, params)
# [1] "Select 2016-11-05, 2016-11-05 17:19:29, hello, world from blah"

如果没有至少一个
params
向量的小示例,这几乎是不可能的。请给出一个最小的可复制示例。我的意思是,在使用该函数时,您如何将
params
作为向量传入?在你运行
as.character
之前,向量是什么样子的-当你在不同类型的对象上使用
c()
时,它可能会变得一团糟。你两次都是对的-为了更清楚,我添加了一个向量示例,是的,出于某种原因,我假设R的向量支持度混合了数据类型,如列表,但事实并非如此。用列表简单地替换向量解决了一个问题:fillSQLQuery(查询,列表(startDateSequence[1],endDateSequence[1],lotTypes[1],id_list[1])也许我看得太多了,但我应该在哪里寻找一个具体的例子,说明什么值
query
和这些“参数”会有价值观吗?
params = list(x1, x2, x3, x4)
fillSQLQuery = function(query, params){
  params = lapply(params, as.character)
  do.call(sprintf, c(query, params))
}

fillSQLQuery(qry, params)
# [1] "Select 2016-11-05, 2016-11-05 17:19:29, hello, world from blah"