2016-12-07 3 views
0

Я бегу процедуру R, которые подключаются к MySQL базы данных с использованием пакета RMySQL, и все работает хорошо. Но сейчас я хочу, чтобы выполнить ту же процедуру корыто RSCRIPT и хотите передать параметры соединения, как этотR Mysql БДСВЯЗЬ параметры

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):. Не удается найти унаследованный метод для функции 'БДСВЯЗЬ' для подписи ' "символ"'»

Что с а я?

+0

'' RMySQL' dbConnect' не имеет версии, которая может принимать одну строку соединения этого формата. Вам нужно будет разобрать входную строку в вашем R-скрипте или, возможно, использовать группы MySQL. –

+0

Я пробовал этот путь, но результат тот же. Или, может быть, вы можете привести mi пример? –

+1

Посмотрите на ответ @sinQueso ниже, вам нужно либо исправить свой синтаксис, либо использовать группы, API-интерфейс RMySQL не позволит вам делать то, что вы имеете в виду. –

ответ

1

Как указывает сообщение об ошибке, вы пытаетесь подключиться к своей базе данных, передав ей вектор символов. Это не сработает.

Одним из вариантов было бы использовать правильный синтаксис в скрипте:

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

Однако уже об использовании Rscript. Поэтому я понимаю, что вы заинтересованы в том, чтобы иметь R-файл, который не хранит сведения о вашем соединении, но вместо этого вы хотите передать эти данные в качестве аргументов из терминала оболочки.

Один из вариантов заключается в использовании пакета 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 и имеет минимальные зависимости. Если вы наберете 'install.packages (« docopt »)' на своем R-терминале, все зависимости будут установлены. Вам не нужно 'devtools' устанавливать его (только если вы хотите установить последнюю версию из github). – sinQueso

+0

безупречный! Я не знаю, почему я следовал инструкциям для github .... Большое спасибо, это действительно полезно для моей работы –

Смежные вопросы