LoginSignup
0
0

More than 5 years have passed since last update.

RNotebookのテーブルに日本語があるときの不具合について

Last updated at Posted at 2019-03-30

キーワード

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を表示する際,一部の日本語が含まれていると不具合が生じることがある.
例えば,"可能"というセルがあるとテーブルが表示されない.そのテーブルだけでなく,以降のチャンクでのテーブルも表示されなくなる.

image.png

詳細な原因は不明だが,
rmarkdownパッケージ内でテーブル表示用htmlを作成する関数に不都合がある.
jsonliteパッケージのtoJSON関数が使われているが,その内部で使われるjsonlite:::C_escape_chars関数では,一部の日本語のエスケープがうまくいっていないようである.
"可能"という文字を
"\"可能\""に変換できればよいようであるが,
"\"可能\\\"に変換してしまっている.

jsonlite:::C_escape_chars関数については,iconvを使うことで突破できる
image.png

しかし,rmarkdownパッケージ側での不都合により,data.frame内の文字列にiconvをかけても,テーブルが表示されない不具合は解決できない.
rmarkdown:::paged_table_htmlという内部の関数では,
data.frameの全ての列にbase::format関数を適用しており,この際にiconvをかけたことで,utf8化がリセット?されてしまっている??.

assignInNamespace関数を用いて,paged_table_html関数を書き換えようと試したが,
どうもうまくいかなかったので,この試みは保留
image.png

妥協の対処法

RNotebookでは表示されるテーブルは,行が多すぎる場合に表示数を小分けにする機能がついているが,この機能をオフにすれば,上記の日本語が表示できない場合でも表示できるようである(今回の例で試した限りでは).
image.png

この機能をオフにするには,チャンクにオプションとしてpaged.print=FALSEを加える.
テーブルの表示が,通常のRStudioコンソールと同様になる.
image.png

例の"可能"も表示出来た.
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0