最終更新:2014/09/03 11:55:48 JST
有料の数値解析や統計処理ソフトウェアを購入する財力がないため(笑),フリーの統計処理ソフトウェアのRは大変助かります.
[*]下へこのページのボトムへ▼ ▲[#]上へこのページのトップへ
2013年4月にRのバージョンが従来のR2.15.3から一気にR3.0にアップしました.早速バージョンアップしたのですが,R2.15.3で処理してその結果を保存している作業スペースファイルを読み込もうとすると次のようなエラーが表示されて読み込めません(ーー;)
エラー: requested primitive type is not consistent with cached value
実は同時にRStudioというR用のIDEのバージョンもアップしたのと,研究室はMacOSXなので…一体何が悪さしてるんやという状態に陥りました.地道に切り分けた結果,Windows XPでもMacOSX10.6でも同じ作業スペースファイルで同じエラーが再現されていますので,OSは白ということになりました.次にRStudioはバージョンを上げずに,Rだけバージョンを上げると上記のエラーが発生しました.ということで犯人はR3.0.0です.
ネットで関連する情報がないか検索していると以下のような情報が.
The problem is an object called .SavedPlots. It was produced by the Windows graphics device when it was recording the history. It can't be loaded into R 3.0.0, because some of the internal organization of things has changed.
The workaround is to restart 2.15.3, load the workspace, then
rm(.SavedPlots)
and save the workspace. After that things should be fine.
I'll try to get something in place in R-patched so that this doesn't cause the whole .RData load to fail.
どうやらhoge.RDataにグラフのプロットをオブジェクトして保存していると,そいつが悪さするようです.試しにR2.15.3に戻ってプロットを削除してやると読み込めました.
上の情報で出てきたR-patchedを探してきてインストールすると,プロットを削除しなくても作業スペースファイルは読み込むことはできました.ただし,警告が出るのでやばいかなと思っていると,案の定,プロットを再生すると
以下にエラー replayPlot(x) : loading snapshot from pre-3.0.0 R version
いちいち削除せずに読み込めるようになっただけマシと思えばよいのですが,前途多難ですわ.
該当する部分の説明文
Saved graphics display lists are R version-specific. Attempting to load workspaces containing them (or some other version-specific objects) aborted the load in R 3.0.0 and earlier; now it does a partial load and generates a warning instead.
[*]下へこのページのボトムへ▼ ▲[#]上へこのページのトップへ
古いバージョンのプロットがあっても読み込めるようになってやれやれと思っていたら新しいトラブルが(ヲイ. 今度のは例えばMacOSX上のRで作ったプロットをrecordPlot()コマンドでRDataに保存して,そいつを例えばWin上で読み込んでreplayPlot()で表示させようとする次のようなエラーが発生して表示されません.
Error: NULL value passed as symbol address
とりあえず保存されているプロットを覗いたところR3.0.0から仕様が変わって,環境依存の設定が含まれていました…
- MacOSX
- package = structure(list( name = "graphics", path = "/Library/Frameworks/R.framework/Versions/3.0/Resources/library/graphics/libs/graphics.so", dynamicLookup = FALSE, handle = <pointer: (nil)>, info = <pointer: (nil)>)
- Windows
- package = structure(list( name = "graphics", path = "C:/Program Files/R/R-3.0.0patched/library/graphics/libs/i386/graphics.dll", dynamicLookup = FALSE, handle = <pointer: 0x63740000>, info = <pointer: 0x6c9d7190>)
元々Rではプロットはバージョンで変わる可能性があるから保存用には使うなと言われているそうで,ソースファイル(hoge.R)と出力でグラフ類を管理するのが無難なようです.
[*]下へこのページのボトムへ▼ ▲[#]上へこのページのトップへ
Rに限らずPDFを最終出力とする場合,フォントを埋め込んでおかないと別の環境で正しく表示されないという問題が発生することがあります.学会によっては提出用PDFはフォント埋め込み必須というところもあります.Rの場合だと出力したPDFファイルにembed_fonts()コマンドを適用すれば埋め込み可能です.
(2014/07/02追記)ただし若干の準備が必要となります.まずextrafontパッケージをインストールしてロードした後,フォントをインポートする必要があります.なおfont_import()はえらい時間がかかります.これらは1度実行すればOKです.
install.packages("extrafont") library(extrafont) font_import()
ちなみにTeXユーザの方ならお奨めなのが,おなじみのComputer Modern fontもインストールしておくと本文と同じフォントフェースでグラフが作成できます.インストールは次のコマンドで可能です.
library(extrafont) font_install('fontcm')
次のように設定してやれば利用できます.何種類かのCMのフォントフェースが用意されていますので,必要なものを適宜ご利用ください.
par(family="CM Roman")
実際のPDFの作成の前には次のコマンドを実行しておく必要があります.こちらはR起動ごとに毎度実行する必要があるようです.なお"library(extrafont)"は"require(extrafont)"でもOKです.
library(extrafont) loadfonts()
PDFの作成はwindowsもMacOSXもpdf()コマンドを利用する方がよいみたいです.MacOSXのquartz()を利用すると利用できるフォントが少ないため埋め込みがうまくいきませんでした(強制的にヒラギノに置き換えられて埋め込まれてしまいました).何か設定が足らんのかもしれませんが…
pdf("hoge.pdf") par(family="Arial Narrow") # ここに描画のコマンドなどなど def.off()
PDFファイルが無事できあがったらembed_fonts()コマンドでフォントを埋め込みます.下の方に基本14フォントを埋め込むためにgs_pdfwr.psを修正する方法を紹介していますが,MacOSXの場合は該当ファイルがないので,optionsに次の設定を加えてやるとうまくいきました.なおoptionsは"-dPDFA"でも埋め込んでくれました.ひょっとしたらgs_pdfwr.psを書き直さなくてもよいのかもしれません.またembed_fonts()と同様を機能持つembedFonts()コマンドがありますが,なぜかMacOSXでフォントが基本14フォントに置き換えられてしまったためembed_fonts()を利用するのに変更しました.
embed_fonts("hoge.pdf", options="-dPDFX")
なおこのコマンドは実はGhostscriptを使用しているため,特にWindowsの場合には,利用環境のどこにGhostscriptの実行ファイルがあるかをSys.setenv()コマンドで教えてやる必要があります.環境変数にパスが設定されていれば省略可能です.MaxOSXでは不要でした.
Sys.setenv(R_GSCMD="C:/Program Files/gs/gs9.07/bin/gswin32c.exe")
まあ,これでも一応埋込みをしてくれることはしてくれるのですが,Ghostscriptのcidfmapファイルやgs_pdfwr.psファイルの設定を変えるともう少し遊べます(笑).
Mogaフォントを利用するようにMogaGothicとMogaMinchoを追加します.そしてMS-Mincho04とMS-Gothic04にエイリアスしていたところをそれぞれMogaMinchoとMogaGothicに変更しておきます(C:\Program Files\gs\gs9.07\lib\cidfmap).ちなみにSubfontIDはそれぞれにフォントに複数種類のフォントが用意されているので,好みのものを番号で指定(最初のフォントが0からだけ注意).なおgs9.07の部分は利用しているバージョンに合わせてください.
% Substitutions /MogaGothic << /FileType /TrueType /CSI [(Japan1) 6] /Path (C:/Windows/Fonts/mogag.ttc) /SubfontID 1 >> ; /MogaGothic-Bold << /FileType /TrueType /CSI [(Japan1) 6] /Path (C:/Windows/Fonts/mogagb.ttc) /SubfontID 1 >> ; /MogaMincho << /FileType /TrueType /CSI [(Japan1) 6] /Path (C:/Windows/Fonts/mogam.ttc) /SubfontID 1 >> ; /MogaMincho-Bold << /FileType /TrueType /CSI [(Japan1) 6] /Path (C:/Windows/Fonts/mogamb.ttc) /SubfontID 1 >> ; % Aliases %/KozMinPr6N-Regular /MS-Mincho04 ; /KozMinPr6N-Regular /MogaMincho ; /KozMinPro-Regular-Acro /MogaMincho ; %/Ryumin-Light /MS-Mincho04 ; /Ryumin-Light /MogaMincho ; %/HeiseiMin-W3 /MS-Mincho04 ; /HeiseiMin-W3 /MogaMincho ; %/Ryumin-Medium /MS-Mincho04 ; /Ryumin-Medium /MogaMincho ; %/HeiseiKakuGo-W5 /MS-Gothic04 ; /HeiseiKakuGo-W5 /MogaGothic ; %/GothicBBB-Medium /MS-Gothic04 ; /GothicBBB-Medium /MogaGothic ;
なおgs9.10では次のように書き換えました(追記:2014年02月22日).両方のフォントの設定とも04がなくなっていました.
% Aliases %/HeiseiKakuGo-W5 /MS-Gothic ; /HeiseiKakuGo-W5 /MogaMincho ; /AdobeMingStd-Light /MingLiU ; /AdobeMyungjoStd-Medium /Batang ; /AdobeHeitiStd-Regular /MicrosoftYaHei ; /HYRGoThic-Medium /Gulim ; %/HeiseiMin-W3 /MS-Mincho ; /HeiseiMin-W3 /MogaMincho ; /STHeiti-Regular /MicrosoftYaHei ; /HYGoThic-Medium /Dotum ; %/Ryumin-Medium /MS-Mincho ; /Ryumin-Medium /MogaMincho ; %/KozMinPr6N-Regular /MS-Mincho ; /KozMinPr6N-Regular /MogaMincho ; /STKaiti-Regular /KaiTi ; /STFangsong-Light /FangSong ; /HYSMyeongJo-Medium /Batang ; /MKai-Medium /DFKaiShu-SB-Estd-BF ; /MHei-Medium /MicrosoftJhengHeiRegular ; /MSung-Medium /MingLiU ; %/Ryumin-Light /MS-Mincho ; /Ryumin-Light /MogaMincho ; /AdobeSongStd-Light /SimSun ; /STSong-Light /SimSun ; %/GothicBBB-Medium /MS-Gothic ; /GothicBBB-Medium /MogaGothic ; /MSung-Light /MingLiU ;
さら基本14フォントも強制的に(笑)埋め込むように修正(C:\Program Files\gs\gs9.07\Resource\Init\gs_pdfwr.ps)
% ---------------- Predefined configurations ---------------- % % These correspond to the 4 predefined settings in Acrobat Distiller 5, % plus a "default" setting that doesn't downsample images. /.a2112 [2 1 1 2] readonly def /.a1111 [1 1 1 1] readonly def /.standardfonts [ % /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique % /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique % /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic % /Symbol /ZapfDingbats ] readonly def
MacOSXとR3.1.0の組み合わせで,例えばCairoのsvg()を利用してSVGファイルとしてプロットを出力しようとすると,文字がギザギザ(いわゆるビットマップ)になってしまうというトラブルに見舞われておりました.
outfile="sample-exp" outPDF=paste0(outfile,".pdf") outSVG=paste0(outfile,".svg") sw="svg" this.width=8 this.height=4 { if (sw=="d"){ # d: display par(family="Times") if (.Platform$OS.type=="windows") windows(width=this.width,height=this.height) #: windows OS else quartz(width=this.width,height=this.height) # MacOSX } else if(sw=="pdf"){ pdf(outPDF,width=this.width,height=this.height) par(family="CM Roman") } else { svg(filename=outSVG,width=this.width,height=this.height, onefile=F, bg="lightyellow") par(family="Times") } } # 以下略
Windows環境では全く問題ないし,pdf()による出力も問題ありません.ただよく実行中のメッセージを見ていると次のエラーメッセージが初回に一度だけ表示されていました.
Fontconfig error: Cannot load default config file
いろいろ試しても改善されないので,ここはひとつということでGoogle先生にお伺いを立てました(笑).とするとありがたいお告げが(笑).結論は「R3.10 for MaxOSXにバグが存在しているので,R3.11のパッチを当てるべし」とのことでした.パッチはおなみの下のサイトにありました.
ちなみに本家のダウンロードバージョンは3.1.0のままでした.MacOSXだけでいいから3.1.1にアップしてほしいものです(フリーなんで文句は言えませんが…).
2014年07月17日追記:本家のダウンロードバージョンも3.1.1にアップされております.
[*]下へこのページのボトムへ▼ ▲[#]上へこのページのトップへ
参考にさせていただいたサイトです(順不同).