cucumber flesh

Rを中心としたデータ分析・統計解析らへんの話題をしていくだけ

🍭knitrでSQLの実行結果を出力する際はengine.optsを指定する

Rによるレポート作成で用いられる{knitr}パッケージでは、RだけでなくbashPythonSASと言った多様な言語の実行を可能にしている。RMarkdownのチャンクとして呼び出すわけだけど、MySQLをエンジンにした場合にちょっと躓いた(これをやる機会はなかなかないだろうけど、今日の私には必要だったのだ...)。

{r, engine='mysql'}
use mysql;
show tables;
# ERROR 1045 (28000): Access denied for user 'uri'@'localhost' (using password: NO)
# Calls: <Anonymous> ... process_group.block -> call_block -> block_exec -> in_dir -> engine
# In addition: Warning message:
# running command ''mysql'  -e 'use mysql;

いや、そもそもデータベースに接続できないよ!って怒られる。というわけでこのチャンクの前に

{r, engine='bash'}
mysql --user=root --password=pass

をしても、正常に出力されない...。困ったナ、となって調べてみたら解決策が見つかった。チャンクオプションのengine.optsに接続に必要なbashスクリプトを記述しておけば良い。

{r, engine = 'mysql', engine.opts = "mysql --user=root --password=pass"}
use mysql;
show tables;

exit
## Warning: Using a password on the command line interface can be insecure.
## Tables_in_mysql
## columns_priv
## db
## event
## func
## general_log
## help_category
## help_keyword
## help_relation
## help_topic
## innodb_index_stats
## innodb_table_stats
## ndb_binlog_index
## plugin
## proc
## procs_priv
## proxies_priv
## servers
## slave_master_info
## slave_relay_log_info
## slave_worker_info
## slow_log
## tables_priv
## time_zone
## time_zone_leap_second
## time_zone_name
## time_zone_transition
## time_zone_transition_type
## user

参考

ドキュメント・プレゼンテーション生成 (シリーズ Useful R 9)

Language engines: Use other languages in knitr | knitr

syntax highlighting while rendering SQL using knitr - CodeOver.org