言語: R. 質問:関数に固定幅フォントを指定できますmenu(..,graphics=T)
か?
説明:
私は最近、ユーザーがデータ フレームの行をインタラクティブに選択する方法について、次の質問をしました。
df <- data.frame(a=c(9,10),b=c('hello','bananas'))
df.text <- apply( df, 1, paste, collapse=" | " )
menu(df.text,graphics=T)
|
並んでほしいです。現時点ではありません。公平に言えば、列を同じ幅にパディングしていません。したがってformat
、すべての列を同じ幅にするために使用します (後で、列ごとの幅を自動的に決定するコードを記述しますが、今は無視しましょう)。
df.padded <- apply(df,2,format,width=8)
df.padded.text <- apply( df.padded, 1, paste, collapse=" | ")
menu( df.padded.text,graphics=T )
まだおかしくなっているのがわかりますか?それでも、 を見るとdf.padded
、次のようになります。
> df.padded
a b
[1,] " 9 " "hello "
[2,] "10 " "bananas "
したがって、各セルは確実に同じ長さにパディングされます。
これの理由はおそらく、これのデフォルトのフォント (とにかく私のシステムでは Linux) が固定幅ではないためです。
だから私の質問は:
関数に固定幅フォントを指定できますmenu(..,graphics=T)
か?
アップデート
@RichieCotton は、それで見るとmenu
、graphics=T
が呼び出さselect.list
れ、次に が呼び出されることに気付きましたtcltk::tk_select.list
。
したがって、これにはtcltk
オプションを変更する必要があるようです。@jverzani から:
library(tcltk)
tcl("option", "add", "*Listbox.font", "courier 10")
menu(df.padded.text,graphics=T)
whenのmenu(...,graphics=T)
呼び出しが TRUE であることを考えると、これは実行可能なオプションであると思います。tcltk::tk_select.list
graphics
menu
tcltk
tk_select.list
(余談ですがtcl('option','add',...)
、オプションが呼び出されたことは言うまでもなく、試してみるためのヒントを提供するドキュメントには何も見つかりません*Listbox.font
!)
別の更新select.list
-およびmenu
コードを詳しく調べたところ、 Windows で (または、.Platform$GUI=='AQUA'
それが Mac の場合) であることがわかりました。tcltk::tk_select.list
はまったく呼び出されず、内部コードにすぎません。したがって、'*Listbox.font' を変更してもこれには影響しません。
私はちょうどだと思います:
- tcltk が存在する場合は、それをロードし、*Listbox.font を courier に設定し、
tcltk::tk_select.list
明示的に使用します - そこにない場合は
menu(...,graphics=T)
、少なくともグラフィカル インターフェイスを取得してみてください (モノスペースにはなりませんが、何もないよりはましです)。 - それも失敗した場合は、 にフォールバックするだけで
menu(...,graphics=F)
、確実に機能します。
皆さんありがとう。