1

我有一个功能

testFun <- function(myTeam){
  print(myTeam)
  teamResults <- sqlQuery(channel,paste(
    "
  SELECT  soccer.tblResultsallMore.TEAMNAME,
    sum(case when soccer.tblResultsallMore.RES='W' then 1 else 0 end) as W,
    sum(case when soccer.tblResultsallMore.RES='L' then 1 else 0 end) as L,
    sum(case when soccer.tblResultsallMore.RES='D' then 1 else 0 end) as D
    FROM soccer.tblResultsallMore
    WHERE soccer.tblResultsallMore.TEAMNAME=myTeam
    GROUP BY soccer.tblResultsallMore.TEAMNAME


    "))
  return(teamResults) # no error if this is not returned
}
testFun("Everton")

如果我在代码中硬编码“埃弗顿”,我会得到所需的输出

[1] "Everton"
  TEAMNAME    W    L    D
1  Everton 1734 1463 1057

但是参数有错误

[1] "Everton"
[1] "42S22 207 [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'myTeam'."                                                                                                                                                                                                                                                                                                                                                                                                
[2] "[RODBC] ERROR: Could not SQLExecDirect

非常感谢帮助

4

1 回答 1

2

在您提供的代码中,名称myTeam没有被替换,它被视为字符串,并且 sql 语句查找名为myTeam.

variabel = "spam"
paste("from table select variabel")

不放在"spam"sql语句里面paste。正确的语法是:

paste("from table select ", variabel)

在您的情况下,我会使用sprintf. 一个例子:

variabel = "spam"
sprintf("from table select %s", variable)

有关更多详细信息,请参阅sprintf.

关于您的评论,如果没有明确的 return 语句,则返回最后一个评估的表达式。讨论见:

是否在函数中显式调用 return

于 2012-09-01T19:36:30.427 回答