Langue: R. Question: puis-je spécifier une police à largeur fixe pour l' menu(..,graphics=T)
fonction?
Explication:
J'ai récemment posé cette question sur la façon d'avoir un utilisateur de sélectionner une ligne d'une trame de données de manière interactive:
df <- data.frame(a=c(9,10),b=c('hello','bananas'))
df.text <- apply( df, 1, paste, collapse=" | " )
menu(df.text,graphics=T)
Je voudrais |
de line-up. Ils ne sont pas sur le moment, assez juste, je n'ai pas augmenté les colonnes de la même largeur. J'ai donc utiliser format
pour obtenir toutes les colonnes de même largeur (plus tard, je vais écrire du code pour déterminer automatiquement la largeur de chaque colonne, mais passons pour l'instant):
df.padded <- apply(df,2,format,width=8)
df.padded.text <- apply( df.padded, 1, paste, collapse=" | ")
menu( df.padded.text,graphics=T )
Voir comment il est encore bancale? Pourtant, si je regarde df.padded
, j'obtiens:
> df.padded
a b
[1,] " 9 " "hello "
[2,] "10 " "bananas "
De sorte que chaque cellule est certainement rembourré à la même longueur.
La raison pour cela est probablement parce que la police par défaut (sur mon système de toute façon, Linux) n'est pas de largeur fixe.
Donc ma question est:
Puis-je spécifier une police à largeur fixe pour l' menu(..,graphics=T)
fonction?
Mise à jour
@RichieCotton remarqué que si vous regardez l' menu
avec graphics=T
il appelle select.list
, qui à son tour appelle tcltk::tk_select.list
.
Donc, on dirait que je vais devoir modifier tcltk
options pour cela. @Jverzani:
library(tcltk)
tcl("option", "add", "*Listbox.font", "courier 10")
menu(df.padded.text,graphics=T)
Étant donné qu' menu(...,graphics=T)
des appels tcltk::tk_select.list
lorsque graphics
est VRAI, je suppose que c'est une option viable, comme n'importe quelle distribution qui serait capable d'afficher le graphique d' menu
, en premier lieu, aurait également tcltk
sur, depuis qu'il a besoin de faire appel tk_select.list
.
(En aparté, je ne peux pas trouver quelque chose dans la documentation qui pourrait me donner l'astuce pour essayer tcl('option','add',...)
, et encore moins que l'option a été appelé *Listbox.font
!)
Une autre mise à jour -- avait un oeil de plus près à l' select.list
et menu
code, et il s'avère que sur Windows (ou si .Platform$GUI=='AQUA'
-- c'est que Mac?), l' tcltk::tk_select.list
n'est pas appelée à tous, et c'est juste un code interne à la place. C'est pourquoi modifier '*zone de liste.la police de caractère n'affectera pas cette.
Je suppose que je vais juste:
- si tcltk est là, la charger, définir la *zone de liste.la police des services de messagerie, et d'utiliser
tcltk::tk_select.list
explicitement - si il n'y est pas, essayez
menu(...,graphics=T)
d'obtenir au moins une interface graphique (ce qui ne sera pas de monospace, mais c'est mieux que rien) - si cela ne fonctionne pas trop, puis il suffit de secours d'
menu(...,graphics=F)
, ce qui sera certainement le travail.
Merci à tous.