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