r - R中的嵌套/递归字符串插值?字符串::str_interp
问题描述
我正在编写一个基于模板和命名列列表创建 MySQL 查询的函数。但是,命名列表中的一列包含一个函数,该函数返回应该进入查询行的 sql 代码。如果我调用str_interp
整个东西,所有东西都会被转换,除了函数行,它仍然是一个函数。
下面是一个非常简化的可重现示例。我知道该函数可用于创建查询,如果我随后调用,则整个过程都有效:
query <- stringr::str_interp(query)
或者
query <- stringr::str_interp(stringr::str_interp(DEFAULT_QUERY))
在其他情况下感觉多余且有潜在危险?我想知道是否有更好的递归方式str_interp
或只是强制它事后评估。有任何想法吗?
另外,不确定是否有更好的方法来引用score_format_function
我对准报价的新手。谢谢!
DEFAULT_QUERY <- "SELECT ${paste(grplines, collapse=',\n ')} FROM table1 t1 join table2 t2 on t1.uid = t2.uid;"
features <- list(
`Age`='t1.age',
`Gender`='t2.gender',
`Race`='t2.race',
`Processed Score`='${score_format_function(score, 10, 100)}'
)
grplines <- paste0(features, ' as `', names(features), '`')
query <- string::str_interp(DEFAULT_QUERY)
score_format_function <- function(column, number, ...) {
rlang::as_stringr(rlang::enexpr(column))
rlang::enexpr(number)
dots <- rlang::list2(...)
paste0(column, '\\', number, ' - ', dots[[1]])
}
解决方案
推荐阅读
- angular - nginx转发器参数到角度
- sql - 接受 id 并返回表的函数 - 如何为多个 id 调用它?
- paypal - Paypal 的四舍五入税额
- javascript - 将数组追加到本地存储对象
- c# - 错误 CS0118 'TestBuilder' 是命名空间,但用作类型
- css - Stylelint 错误 - 前导装饰器必须附加到类声明
- events - 谷歌地图点击事件不适用于点击标记
- logstash - 由于 UTF-8 中的无效字节序列,无法加载 Logstash
- python - 如何使 matplotlib.pyplot.figure 调整大小适用于 2 个图?
- javascript - Javascript 在匿名函数定义中解构