キーワード
RNotebook, R Notebook, Windows
RMarkdown, R Markdown,
paged.print=FALSE,
jsonlite::toJSON,
jsonlite:::C_escape_chars
rmarkdown:::paged_table_html,
base::format
内容
RNotebookでdata.frameを表示する際,一部の日本語が含まれていると不具合が生じることがある.
例えば,"可能"というセルがあるとテーブルが表示されない.そのテーブルだけでなく,以降のチャンクでのテーブルも表示されなくなる.
詳細な原因は不明だが,
rmarkdownパッケージ内でテーブル表示用htmlを作成する関数に不都合がある.
jsonliteパッケージのtoJSON関数が使われているが,その内部で使われるjsonlite:::C_escape_chars関数では,一部の日本語のエスケープがうまくいっていないようである.
"可能"という文字を
""可能""に変換できればよいようであるが,
""可能\\"に変換してしまっている.
jsonlite:::C_escape_chars関数については,iconvを使うことで突破できる
しかし,rmarkdownパッケージ側での不都合により,data.frame内の文字列にiconvをかけても,テーブルが表示されない不具合は解決できない.
rmarkdown:::paged_table_htmlという内部の関数では,
data.frameの全ての列にbase::format関数を適用しており,この際にiconvをかけたことで,utf8化がリセット?されてしまっている??.
assignInNamespace関数を用いて,paged_table_html関数を書き換えようと試したが,
どうもうまくいかなかったので,この試みは保留
妥協の対処法
RNotebookでは表示されるテーブルは,行が多すぎる場合に表示数を小分けにする機能がついているが,この機能をオフにすれば,上記の日本語が表示できない場合でも表示できるようである(今回の例で試した限りでは).
この機能をオフにするには,チャンクにオプションとしてpaged.print=FALSEを加える.
テーブルの表示が,通常のRStudioコンソールと同様になる.