R on OpenBSD (2)
トランプ爺には笑ちゃうね。ああ言うのを日本では、「身から出た錆」と言うんよ。錆を味方(Rust beltの連中)に付けてのし上がり、錆で身を亡ぼす。とか思っていたら、したたかな爺いは、転んでもただは起きぬ。「禍を転じて福と為す」方針。 お祭りはまだまだ続くので、暫くは楽しめそう。
国勢調査
巷では国勢調査が9月下旬から始まったようであるが、調査の基点は、10月1日の深夜0時なんよ。その時に愛人宅に居ると、不都合が起きる。気をきかせて、愛人は本宅に帰るように促したとか。 そんな真夜中の調査なら、提灯が足りません、どないしましょ? って、明治の頃の話ね。
住民票で十分だろうにを押し切って、実体調査が必要。八王子市みたいに大学が集中してる所では、住民票を移動しないで、在学してる人が多数で、万人単位の幽霊市民が居るとか。そういう実体を炙りだす。
オイラーは、1日の朝にやったよ。昔はもっと面倒だった気がするけど、もう働いていないので、就業関係の質問がカットされてたんだな。
最後にアンケート。e-statとっても使い辛いので何とかしろとRの人になった積りで苦言を書いたぞ。少なくとも、jsonでさっと取れるようにしろよな。
国勢調査の悪い点は、見返りが無いと言う事。それなのに根掘り葉掘りプライバシーに踏み込んだ質問がなされる。回答する人はたまったものでは無い。
従って調査員にはなりたくない。ひょっとしたら、 国勢調査員殺害事件 なんてのに巻き込まれるかも知れないし、 国勢調査で居留守で調査票を手渡しできません。 ってなって、頭にきて調査票を燃やしちゃったなんて事もありますから。
よって、ナンバーカードを強力に推進中。今はポイントとか言う飴をぶら下げているけど、そのうちにカードを持っていないと、医者にもかかれないと言う、真綿で首を絞めつける事態に持って行かれる。
そうなれば、みんなから嫌われている国勢調査は無くなる。ああ、無くなるんではなくて、総番号制で、紐付けが簡単に出来るから、それで賄ってしまうようになる。既に北欧では、そういう事態になっているそうな。
tofu(2)
前回OpenBSDのRでplotすると、文字が豆腐になった。ああ、若い人は知らないか、豆腐文字。いわゆる文字化けで表示出来ない時、□になっちゃう事を言うんだった。 一応、解決方法を見つけておいたんだけど、par(family='console')なんてのを.Rscriptに書くとエラーになってしまう。諦めムードなんだけど、きった世界には困った人が居ると思って、gg(ぐぐる)してみたんだ。検索語は、OpenBSD r-lang plot ぐらいね。 そしたら幸運な事に、 R plots on OpenBSD show graphics but text is replaced with placeholder images なんてのが引っかかってきた。
豆腐文字なんてのは、精進料理の類なんで世界では通用しないのね。言い回しは上記のように論理的に組み立てるのが正しい。思わぬ英語の勉強である。
それにしても、セキュリティー原理主義のOpenBSD上で、特殊用途のRを使ってる人が居て、オイラーは嬉しくなってしまった。4月前の質問で67回もアクセスされてた。オイラーもそのお仲間の一人って事です。 そして、質問者はオイラーと同じその場しのぎをやってた。
解決方法は、下記のフォントを入れるそう。
ob$ less liberation-fonts/pkg/DESCR Liberation font software consists of TrueType-OpenType formatted font software for rendering Liberation typefaces in sans serif, serif, and monospaced character styles. There are three sets: * Sans (a substitute for Arial, Albany, Helvetica, Nimbus Sans L, and Bitstream Vera Sans) * Serif (a substitute for Times New Roman, Thorndale, Nimbus Roman, and Bitstream Vera Serif) * Mono (a substitute for Courier New, Cumberland, Courier, Nimbus Mono L, and Bitstream Vera Sans Mono).
フォントの事はフォントに知らないオイラーなんだけど、以前調べた時に出て来た、Sans,Serif,Monoなんてファミリー?が伺える。さざ波フォントじゃいかん訳? よう分からん。
もう一つ解決法が提示されてた。
ob$ cat .Rprofile # package load options(defaultPackages = c(getOption("defaultPackages"), "dplyr")) # default X11() setting setHook(packageEvent("grDevices", "onLoad"), function(...) grDevices::X11.options(width = 5, height = 5, xpos = 0, pointsize = 10, type = "x11"))
X11なデバイスの初期化をロード時に行いましょって奴。何だかjavascriptの常用句みたいだな。パッケージがロードされる時に、無名関数で、オプション設定。そんな方法を登録しておくってね。
さてどちらを採用する? セキュリティー原理主義に則り、たとえフォントであろうとも余計な物は入れないって事で、後者の方法を試した。そして、ついでと言ってはあれだけど、表示エリアを5インチスクウェアにしておいた(画面が狭い為)。これで、喉につかえていた小骨が取れた気分ですよ。
Sys.getenv(2)
前回はひょんなことから、Sys.getenvなんてのを知った。普通は引数に環境変数名を与えるんだけど、引数無しでもOK。その場合は、shellでのprintenv相当の結果が返って来る。
大体仕組みは想像付くけて、ソースが有るんで、ねちっこく追ってみるか。曲がりなりにもRのユーザーなんで、仮設を立ててみる。
mainの第三引数にenvのポインターを指定しておいて、そこから手繰るのでしょう。それしか思いつかん、ってか、それしかI/Fは無いはず。一応、p値は、自信たっぷりに100ぐらいでしょう。バーカ、確率は0から1の範囲ですよ。
と言う事で、自信たっぷりに、main/Rmain.cを調べると、、、
int main(int ac, char **av) { R_running_as_main_program = 1; Rf_initialize_R(ac, av); Rf_mainloop(); /* does not return */ return 0; }
大外れのすってんてんである。若し賭けていたら、身ぐるみはがされて、裸でほっぽり出される所ですよ。
よーし、裸一貫から出直しだ。腹にgdbを抱えてね。
(gdb) b do_sys[TAB] ;; compleate do_sys do_syschmod do_sysinfo do_system do_sysumask do_sysbrowser do_sysgetpid do_syssleep do_systime (gdb) b do_getenv Breakpoint 1 at 0x564cb24730d0: file sysutils.c, line 367.
do_sys
に続く名前にどんなのが有るか確認。お目当ては無いぞ。野生の勘で、 do_getenv
を指定したら有った。本当にそれで良いのか?
正確にやるなら、main/names.c に登録されてる対応表を調べる事だ。明治の頃の国勢調査で、通称名で熊と書いた人が咎められたそうな。役場で戸籍を調べたら、全く違う名前だったらしい。ユーザーは、気軽に Sys.getenv
って、呼んでるけど、システムの手続き上は、 do_getenv
って事だ。
{"Sys.getenv", do_getenv, 0, 11, 2, {PP_FUNCALL, PREC_FN, 0}},
=> for (i = 0, e = environ; *e != NULL; i++, e++); PROTECT(ans = allocVector(STRSXP, i)); for (i = 0, e = environ; *e != NULL; i++, e++) SET_STRING_ELT(ans, i, mkChar(*e));
昔やったな(2018-08-27)。environって言うグローバル変数に環境変数へのポインターがセットされてる。それを使って、まずはRの領域にエリア確保。続いて、そのエリアに値を取り込みって算段か。
なお、 SET_STRING_ELT
は、etagで引っかかってこないけど、memory.cに定義されてた。
void (SET_STRING_ELT)(SEXP x, R_xlen_t i, SEXP v) { if(TYPEOF(CHK(x)) != STRSXP) error("%s() can only be applied to a '%s', not a '%s'", "SET_STRING_ELT", "character vector", type2char(TYPEOF(x)));
こういう風に、関数名が括弧で括られている場合は、誤解しちゃうからかな? こういう奴はCARだとかもそうだ。Lispをなるべく隠しているのだな。
一方、引数を与えて ('R_HOME')
呼ぶと
=> char *s = getenv(translateChar(STRING_ELT(CAR(args), j))); : (gdb) p s $9 = 0x7ffe1aada67c "/home/sakae/MINE/lib/R"
因子分析
正しいRユーザーは、統計処理に勤しむものです。ソースと戯れていてはいけません。と言っても、身近に統計処理したいものなんて無いぞ。
ちらちらとCQ社出版のインターフェース誌を見てたら、Rの連載が載ってた。今まで気がつかなかったよ。で、お題に因子分析ってのを取り上げていた。
オイラーもやってみるかな。例によって、セカンドオピニオンです。
サンプルを落としてみたけど、みんなSHIFT-JISのデータだったりして、Windowsと言うかEXCELがはこびっている世の中に嫌気がさしますよ。やっぱり綺麗なデータじゃないとやる気Nothing。だからtidyを使えって?日本では、それ以前の問題ですよ。データ後進国、日本。
3D-graph
と言う事で、少し違う方面に手を出してみる。
ある人と話をしてたら、Rでも3次元のグラフ表示出来るんですよねと聞かれた。多分出来るでしょうけど、みんな2次元の少女達が好きそうだからどうかな。これはもう、勇敢にアタックしてみるしかない。
デフォで使うなら、latticeが有る。機能不足ならrglを入れろとな。
苦しみはやがて楽しみに変わるって、お前はマゾか? いいえ、苦しい思いをして山登り、その果ては、素晴らしい景色が待っている。 若かりし頃、寮で寝てたら、おい山へ行くぞと拉致された。して、青森駅前の市場で、ホタテ貝を調達。八甲田山へ登山。苦しくて苦しくて。。。でも、処女雪が舞ってた。 ベースキャンプを設営。
今日は、あの峰から滑ってみるよとか、クタクタになるまでスキー三昧。夜は、ホタテ貝を焼いて、ウィスキーで酒盛り。こういう時は日本酒ではアルコール度数が低いので、効率が悪い。運び上げるならウィスキー等の度数が高いのがお勧め。遭難しそうになっても、気付け薬になるしね。 夜は、余りに静かすぎて、幻聴が聞こえたぞ。佳き思い出だ。
国土地理院が素晴らしいデータを公開してくれている。 日本の主な山岳 。日本百名山でNHKとかも利用してるな。e-statの連中よ。こういう易しいインターフェースを見習えよ。
遊び方は、 山頂立体地図データ を参照。 鹿児島と言えば桜島だけど、単独峰である開聞岳でもやってみるかね。久しぶりの対面になるぞ、と。