MacのESSでもquartz描画+日本語したいよね

してみた。
.Rprofileを以下のようにしたところ、とりあえず動く。
Carbon Emacs 2008年夏版と R 2.7.1 で確認しています。

if (.Platform$pkgType == "mac.binary"){
	options(device="quartz")
}

setHook(packageEvent("grDevices", "onLoad"),
        function(...){
            grDevices::quartzFonts(serif=grDevices::quartzFont(
                c("Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6",
                  "Hiragino Mincho Pro W3",
                  "Hiragino Mincho Pro W6")))
            grDevices::quartzFonts(sans=grDevices::quartzFont(
                c("Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6",
                  "Hiragino Kaku Gothic Pro W3",
                  "Hiragino Kaku Gothic Pro W6")))
            # grDevices::quartz.options(family="sans")
        }
)
attach(NULL, name = "MacJapanEnv")
assign("familyset_hook",
       function() { if(names(dev.cur())=="quartz") par(family="sans")},
       pos="MacJapanEnv")
setHook("plot.new", get("familyset_hook", pos="MacJapanEnv"))

options(X11fonts = c("-alias-gothic-%s-%s-*-*-%d-*-*-*-*-*-*-*",
                          "-adobe-symbol-*-*-*-*-%d-*-*-*-*-*-*-*"))

setHook(packageEvent("grDevices", "onLoad"),
        function(...) grDevices::pdf.options(family="Japan1GothicBBB")
)

動作確認は

plot(1:10, main="ほげ")
pdf()
plot(1:10, main="ふが")
dev.off()

ぶっちゃけ、RjpWiki や id:syou6162 にあるものへ options(device="quartz") を足して、pdf.optionsを書いてるだけ。
Terminal から ESS ではうまくいってる。
Terminal から直接 R だと描画やpdf保存はうまくいくけど、Rで打ちこむ時に文字が化ける。Terminalなどではutf-8で日本語打てるので、R絡みかな?
このdevice="quartz"をやるのに海外だと CarbonEL というLibraryを使うひともいるようだ。特にメリットに気付けていないのでスルーした。

自分の環境ではなぜか

ps.options(family="Japan1GothicBBB")

だと postscript への保存時に日本語変換がうまくいかないというエラーが。
かなしい。

Rのhistoryを一箇所にしてみたいとおもったけど ESS からだとうまくいかないよう‥

~/.Renviron を以下のようにつくる。

R_HISTFILE=~/.Rhistory
R_HISTSIZE=10000

~/.Rprofile に

# Things put here are done first.
.First <- function(){
  utils::loadhistory(Sys.getenv("R_HISTFILE"))
  cat("\n   Welcome to R!")
  cat("\n  " , paste(date()), "\n\n" )
  cat("\n  " , "You are in", paste(getwd()), "\n\n" )
}

# Things put here are done last.
.Last <- function(){
  utils::savehistory(Sys.getenv("R_HISTFILE"))
  graphics.off()
  cat("\n\n  .Rhistory has been saved on " ,paste(date()))
  cat("\n\n  Goodbye!\n\n")
}

R_HISTFILEはデフォルトだと".Rhistory"なので、起動したディレクトリに作られる。これだと違う場所で行った操作が呼び出せない。
上の2行で、zsh のように便利にならないものかと思っていたのだけど‥。


普通に Terminal から直接 R を呼んだりする場合は問題なさそうだが、ESS はhistory の扱いがどうも違う。iESS は ESS から飛ばされてきた命令を記録してなさそうだし。残念。