如何用R刮去重定向的URL

时间:2012-09-01 19:26:25

标签: sql r function

我有一个功能

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")

我在代码中硬编码'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

非常感谢

1 个答案:

答案 0 :(得分:2)

在您提供的代码中,名称myTeam未被替换,它被视为字符串,sql语句将查找名为myTeam的团队。

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

不将"spam"放在paste内的sql语句中。正确的语法是:

paste("from table select ", variabel)

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

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

有关详细信息,请参阅sprintf的文档。

关于您的注释,如果没有显式的return语句,则返回最后一个计算的表达式。有关讨论,请参阅:

Explicitly calling return in a function or not