web-dev-qa-db-ja.com

rでsqldfを使用しているときにデータベースに接続できませんでした

Rにcsvファイルをロードしましたが、sqldfを使用して列を選択しようとすると、常に次の場所に移動しました。

Error in .local(drv, ...) : 
  Failed to connect to database: Error: Access denied for user 
  'User'@'localhost' (using password: NO)
Error in !dbPreExists : invalid argument type

修正方法がわかりません。

これが私のスクリプトです:

library("RMySQL")
library(sqldf)
acs<-read.csv("getdata_data_ss06pid.csv",head = T)
sqldf("select pwgtp1 from acs where AGEP < 50")
9
victordongy

RMySQLを使用する場合は、sqldfライブラリをロードする必要はないようです。これは、すでにデータをメモリに読み込んでいるためです。これは、ここで問題になっているようです。

library(RMySQL)
library(sqldf)
sqldf("select * from df limit 6")

.local(drv、...)のエラー:データベースへの接続に失敗しました:エラー:ソケット '/tmp/mysql.sock'を介してローカルMySQLサーバーに接続できません(2)!dbPreExistsのエラー:無効な引数タイプ

ただし、RMySQLライブラリが切り離されている場合、sqldfは機能します。

detach("package:RMySQL", unload=TRUE)
sqldf("select * from df limit 6")
#   time  type
# 1    1 type1
# 2    2 type1
# 3    3 type2
# 4    4 type1
# 5    5 type2
# 6    6 type1
14
Psidom

TL; DR

RMySqlパッケージをアンロードする代わりに、sqldf関数を呼び出す前に、SQLiteデフォルトドライバーオプションをsqldfに明示的に設定します。

options(sqldf.driver = "SQLite")
sqldf("select * from df limit 6")

説明

明示的に定義されていない場合、sqldfパッケージは、使用するDBドライバーを次のように決定します。

指定されていない場合は「dbDriver」オプションがチェックされ、設定されていない場合はsqldfがRPostgreSQL、RMySQL、またはRH2がこの順序でロードされているかどうかをチェックし、最初に見つかったドライバーに対応するドライバーが使用されます。何もロードされていない場合は、「SQLite」が使用されます。 dbname = NULLを指定すると、デフォルトが使用されます。

あなたの場合、RMySqlはすでにロードされており、sqldfはMySQLDBを使用して、testというスキーマに書き込もうとします。 RMySQLパッケージのデタッチとアンロードは1つのオプションですが、必須ではありません。 @GaborGrothendieckがコメントで述べたように、最も簡単な修正は、明示的に使用するDBドライバーをsqldfに指示することです。

sqldf("select * from df limit 6", drv="SQLite")

常にdrv="SQLite"を追加する必要がないように、セッションのデフォルトドライバーをSQLiteに永続的に設定できます。

options(sqldf.driver = "SQLite")
7
Mark Heckmann