如何在 sqldf 查询中包含用户定义的变量?

How to include a user defined variable in sqldf query?

我有一个值列表,我想在将来解析这些值。暂时确保我的格式对于这个查询是正确的。我有这个查询:

var2 = "Application Maintenance"

r = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
     From df WHERE Iteration = $var2") 

query = sprintf('Select Iteration, (SUM(Hours) / SUM(Effort)) 
as Efficiency from df WHERE Iteration = %s', var2)

q = sqldf(query)

我在两次尝试中都遇到了错误:result_create(conn@ptr, statement) 中的错误: 附近 "Maintenance": 语法错误

我过去只使用过一次 sqldf,所以我对语法还是陌生的。当我将 $var2 更改为 "Application Maintenance" 时,查询工作得很好,但当我使用用户定义的变量时查询不起作用。

我已经尝试了其他 Whosebug 帖子的解决方案,但我一直收到与上面相同的错误。

如有任何帮助,我们将不胜感激!

编辑:列表迭代的代码(path_list 是一个字符串列表):获取 NULL 'tcltk::as.tclObj(X) 中的错误:无法处理模式 'list' 的对象'

for (var1 in path_list){
  query = fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency 
  From df WHERE Iteration = '$var1'")
  print(query)

}

编辑 2:path_list 包含在这种格式中(在 RStudio 中单击列表时:

       Iteration
'Application Maintenance'
'Task'
'QA'

编辑 3:包括前 15 行的示例。这个数据集中有数千个。出于保密原因更改了 'Iteration' 列名称:

我们可以将 $var 括在单引号中

library(sqldf)
fn$sqldf("Select Iteration, (SUM(Hours) / SUM(Effort)) as Efficiency
 From df WHERE Iteration = '$var2'") 

使用可重现的例子

fn$sqldf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '$var2'")
#    cyl Efficiency
#1   6   34.21462

如果我们循环执行此操作

path_list <- c("Mazda RX4", "Datsun 710", "Valiant")
for(var1 in path_list) print(sqldf(sprintf("select cyl, (sum(hp)/sum(wt)) as Efficiency from mtcars where new = '%s'", var1)))
#cyl Efficiency
#1   6   41.98473
#  cyl Efficiency
#1   4   40.08621
#  cyl Efficiency
#1   6   30.34682

数据

data(mtcars)
mtcars$new <- row.names(mtcars)
var2 <- "Hornet 4 Drive"