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

R 如何在sqldf查询中包含用户定义的变量?,r,sqldf,R,Sqldf,我有一个值列表,我想在将来解析这些值。暂时确保我的查询格式正确。我有一个疑问: 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))

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

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,声明): 接近“维护”:语法错误

我过去只使用过一次sqldf,所以我对语法还是新手。当我将$var2更改为“应用程序维护”时,查询工作正常,但当我使用用户定义的变量时,查询不工作

我曾尝试过其他Stackoverflow帖子的解决方案,但我一直遇到上面同样的错误

任何帮助都将不胜感激

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

}

编辑2:路径列表包含在此格式中(在RStudio中单击列表时:

       Iteration
'Application Maintenance'
'Task'
'QA'
编辑3:包含前15行的示例。此数据集中有数千行。出于保密原因更改了“迭代”列名:


我们可以将
$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

path\u list工作得很好,非常感谢。出于某种原因,这在我包含在编辑中的For循环中不起作用。我使用了相同的逻辑,它在tcltk::as.tclObj(X):无法处理模式“list”的对象。您的
path\u list
是什么?在这种情况下您必须使用
list
[[
用于extraction@akrun是的,这是一个字符列表。我在哪里使用[[用于提取?我使用内容作为for循环的迭代器,不确定如何重新构造它。请使用一个可复制的示例,因为这样可以更容易地理解问题所在。@akrun我包含了edit。如果需要更多详细信息,请让我知道。该列表包含这些值和一些值。@akrun我需要做的只是转置请看我举办“迭代”的名单。再次感谢您。您的解决方案非常有效!
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"