2016-12-07 66 views
0

我正在運行連接到使用包RMySQL一個MySQL數據庫 A R程序,並且一切工作正常。但現在我想要運行同樣的程序低谷RSCRIPT,並想通過連接參數,這樣[R Mysql的DBCONNECT參數

library(RMySQL) 
con_str <- "MySQL(), user = 'root', password = '', dbname = 'nepal_statagri', host = 'localhost'" (this is the string I want to pass as a parameter to RScript) 
mysqlconnection = dbConnect(con_str) 

但它不工作,我得到一個消息:

「錯誤(函數(類,FDEF,mtable):無法找到函數簽名 ' 「字符」'」的 繼承的方法 '數據庫連接'

什麼C我呢?

+0

''RMySQL' dbConnect'沒有可以接受這種格式的單個連接字符串的版本。您將不得不在R腳本中解析輸入字符串,或者使用MySQL組。 –

+0

我已經試過這種方式,但結果是一樣的。或者,也許你可以給一個例子嗎? –

+1

查看下面@sinQueso給出的答案,您需要修復您的語法或使用組,RMySQL API不會讓您按照您的想法進行操作。 –

回答

1

如錯誤消息所示,您嘗試通過傳遞一個字符向量來連接到您的數據庫。這是行不通的。

一種選擇是使用正確的語法在你的腳本:

library(RMySQL) 
mysqlconnection <- dbConnect(RMySQL::MySQL(), 
          user = 'root', 
          password = '', 
          dbname = 'nepal_statgri', 
          host = 'localhost') 

不過,你提到使用RSCRIPT。所以我的理解是,您有興趣擁有一個不存儲連接細節的R文件,而是希望將這些細節作爲來自shell終端的參數傳遞。

要做到這一點的一個選擇是使用包docopt,它允許您輕鬆地爲您的R腳本創建命令行界面。例如,如果您保存在一個名爲connect_mysql.R下列文件:

'usage: connect_mysql.R [--user <user> --password <pwd> --db <database> --host <host>] 

options: 
    --user username 
    --password password 
    --db database 
    --host host 
' -> doc 

library(docopt) 
library(RMySQL) 

opts <- docopt(doc) 

con <- dbConnect(RMySQL::MySQL(), 
      username = opts$user, 
      password = opts$password, 
      dbname = opts$db, 
      host = opts$host) 
dbListTables(con) 
dbDisconnect(con) 

,那麼你就可以把它用RSCRIPT並通過您的連接細節:

Rscript connect_mysql.R --user root --password password --db nepal_statgri --host localhost 
+0

非常感謝你,這正是我需要的!但是....我已經從CRAN下載了DevTools和Docopt兩個軟件包並安裝了它們,但是我無法運行它們,因爲它們需要其他軟件包;我曾經一個接一個地嘗試過,並且記錄了Memoise,Digest,Httr,Withr,R6 ....這似乎是一個永無止境的故事。這裏是我可以獲得所有依賴的地方嗎? –

+0

'docopt'可從CRAN獲得,並具有最小的依賴關係。如果在R終端輸入'install.packages(「docopt」)',則所有依賴關係都將被安裝。你不需要'devtools'來安裝它(只有你想從github安裝最新版本)。 – sinQueso

+0

完美!我不知道爲什麼我會按照github的說明操作....非常感謝,對我的工作 –