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,'\\',' - ',dots[[1]])
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...