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

コードに「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 に答える