2017-10-01 29 views
0

私はここで新しいですが、私はRの使用についてあまり知識がありません。私は現在の問題の解決策を見つけることができません。私の関数の引数。R:関数の引数として文字を使用する

Path <- "C:/...../" 

foo <-function(Path){ 
     Driver <- "Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=Path" 
     connect <- odbcDriverConnect(Driver) 
     return(connect) 
} 

私の問題は、そのパスが関数内で引用符で置き換えられることです。少なくとも私の関数には次のようなフォーマットがあります。

...DBQ="C:/..../"" 

引用符を削除するためにnoquoteやcatでこの問題を解決しようとしましたが、それは役に立ちませんでした。

私はあなたがRで初心者を支援していることを事前にありがとう:)

答えて

1

あなたはPathを挿入するためにsprintf()を使用することができます。

Path <- "C:/...../" 
sprintf("Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=\"%s\"", Path) 
# [1] "Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=\"C:/...../\"" 

だからあなたの更新機能が

foo <- function(Path) { 
    Driver <- "Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=\"%s\"" 
    connect <- odbcDriverConnect(sprintf(Driver, Path)) 
    return(connect) 
} 

だろうが、すべてのその驚くべき用途にhelp(sprintf)を参照してください。


更新:それはあなたがPath引用符で囲むかどうか私にははっきりしないので、私はそれらなしでそれを持ってする方法が含まれます。 文字列の引用符を使用しない場合は、sprintf()形式から引用符を削除してください。

Path <- "C:/...../" 
sprintf("Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=%s", Path) 
# [1] "Driver={Microsoft Access Driver (*.mdb,*.accdb)};DBQ=C:/...../" 
+0

FOO < - 関数(パス){ ドライバ<< - はsprintf( "ドライバ= {Accessドライバー(* .MDB、* ACCDB)}; DBQ =%のS。" パス) 接続<< - odbcDriverConnect(ドライバ); "; DBQ = Cドライバ= {Accessドライバー(* .MDB、* ACCDB)}:/...../" : リターンIが正しい形式を得る。この溶液で }を(接続)それでも私のデータベースに接続しません。私が本当の "パス"(変数ではない)を関数に置き換えるなら、私は接続することができます。 – Leo96

関連する問題