このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

2015-12-01から1ヶ月間の記事一覧

deep代入の例:.libPathsの環境

" > find(".libPaths") [1] "package:base" > environment(.libPaths) > .libPathsでは、所属パッケージと環境が違う。無名環境がスコープになっている。その理由は、 > .libPaths function (new) { if (!missing(new)) { new <- Sys.glob(path.expand(new))…

deep代入は誤解しがち

http://www.is.titech.ac.jp/~mase/Rtips.html#item53 とか見ると、永続付値=deep代入を.GlobalEnvへの代入と記述している。それだと、.libPaths()のコードは理解できない。 > .libPaths function (new) { if (!missing(new)) { new <- Sys.glob(path.expan…

new.env()のイヤーなデフォルト値(誤解だった)

[追記]これは誤解[/追記] > new.env function (hash = TRUE, parent = parent.frame(), size = 29L) .Internal(new.env(hash, parent, size)) > 関数内で、new.env()すると、親スコープが親フレームになる。これはオカシイだろうよ。.GlobalEnvのparent.fram…

環境とフレームとエンクロージャ、クロージャ

「環境=フレーム+エンクロージャ」ということだが、 フレームは束縛セット(キー/値ベアの集合)であって、あえて言葉を作る必要なんてない。 単数形の束縛(binding)は使っているのだから、binding set とか a set of binding とでも言えば十分。 フレ…

歴史的遺物

Sとの互換性を考慮しているらしい。mode()とtypeof()の二本立てとか。storage.mode()もある。 かつてリストはpairlistの意味で、ベクトル(または新リスト)が今のリストだったようだ。 vectorコンストラクタでリストが作れるのはそんな理由か? これもSとの…

arrayが変だ

class(x) が"arry"と出ても、unclass(x)した後のmodeはベクトルだったりリストだったり。非常に紛らわしい。どうも、arrayは構造的タイピングのような仕掛けで、dimがあるとarrayと解釈するようだ。dimnamesも解釈する。matrixは単に次元が2の配列。これって…

for内の変数

for (i in 1:10) print(i) のiは環境を汚す。なんてこった。対処は: local({ for (i in 1:10) print(i) })

深い代入、永続代入

"ウィッカムは、"The deep assignment arrow, 関数内で

命名法の不統一

関数や変数の命名法がバラバラなのはしょうがないとしても、 > args(data.frame) function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE, stringsAsFactors = default.stringsAsFactors()) NULL > args(sapply) function (X, FUN, ..., …

パッケージ理解のコツ

データ型(mode)としての環境と、役割・用途としてのスコープオブジェクト、そしてさらに特定した使い方としての名前空間オブジェクトを区別する。 名前空間は特殊なスコープオブジェクトである。 スコープオブジェクトは環境型のオブジェクトの使い途を意…

モナド・トランスポンダー:動機

とりあえず定義だけ、とメモして、後で動機や意義がサッパリ分からなくなることがあるので、先に動機、経緯を書いておく。モナドは、圏C上の自己関手の圏 End(C) 内のモノイドと考える。一般に、外の圏が何であれ、モノイドに対して次の概念を考えることが出…

idiosyncratic イディオシンクラティック

idiosyncratic【形】 〔個人や集団の〕特異な、独特な、変わった 《医》特異体質の

トランスポンダー

transponder 【名】〔航空機などの〕(自動)応答装置、トランスポンダー◆あらかじめ定められた無線信号を受信すると、自動的に応答信号を返す発信装置。航空機の位置などを知らせるのに用いられる。◆【語源】transmitterとresponderからの合成語。 〔放送衛…

パッケージと名前

パッケージ名:パッケージディレクトリのDESCRIPTIONファイルのPackage:項目に書かれる名前。パッケージ名とVersion:によってパッケージが識別される。 (パッケージの)名前空間名: 名前空間レジストリに登録されるキー。パッケージ名と同じ。 名前空間の…

plyrとpryrは違う

紛らわしい。どちらもハドリー・ウィッカムの有能なライブラリ。 ply【2自動】せっせと働く〔船・バスなどが〕定期的に往復する【2他動】〔道具などを〕せっせと使う〔仕事などに〕精を出す〔船が川を〕定期航行する〔バスなどが道を〕定期的に往復する pry…

.BaseNamespaceEnv と baseenv() は違う

baseのエクスポーター(公開記述)は、as.environment(length(search())) で得られる。 .BaseNamespaceEnvはbaseenv()とは別で、baseパッケージの名前空間オブジェクトを指す。 > length(ls(.BaseNamespaceEnv, all.names=T)) # .BaseNamespaceEnv の名前個…

エクスポーターは名前空間ではない

isNamespace(x) でTRUEが返るものを(狭義の)名前空間と呼ぶなら。パッケージが提供するエクスポーターオブジェクト(環境名は package:パッケージ名)は名前空間ではない。名前空間はgetNamespace(名前空間名) で得られたものだけである。

名前空間の操作

↓は古い論説だが、必要なことはだいたい書いてある。 http://homepage.stat.uiowa.edu/~luke/R/namespaces/morenames.pdf 基本的な操作方法: nsreg 名前空間データベース(namespace registory)を取得する。名前空間データベースは環境オブジェクトである…

名前空間関係の隠された名前/隠されてない名前

> ls(.BaseNamespaceEnv, pattern="^\\..*Namespace", all.names=T) [1] "..getNamespace" ".BaseNamespaceEnv" ".getNamespace" ".getNamespaceInfo" [5] ".methodsNamespace"名前空間オブジェクト(環境)を指す名前:、 .BaseNamespaceEnv .methodsNamesp…

隠された名前を見る

baseだけで100個ほどある。 > ls(.BaseNamespaceEnv, pattern="^\\.", all.names=T) [1] "..getNamespace" ".__H__.cbind" [3] ".__H__.rbind" ".__S3MethodsTable__." [5] ".amatch_bounds" ".amatch_costs" [7] ".ArgsEnv" ".AutoloadEnv" [9] ".BaseNames…

seq_alongを使う。

for (i in 1:length(x)) something(i) とすると、xが空列のときにエライことになる。for (i in seq_along(x)) something(i) とする。

リストへの要素値を設定

lis[[i]] lis[i]

普通のファイルの読み込み

readLines() または scan()。見るだけなら、file.show()

コンストラクタの不統一

毎度、結果の統制のなさ、バラバラさが素敵すぎる。 > numeric(10) [1] 0 0 0 0 0 0 0 0 0 0 > logical(10) [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE > list(10) 1 [1] 10> vector(10) 以下にエラー vector(10) : ベクトル: モード…

ハッシュマップの実現

new.env(parent=emptyenv()) なんらかのデータの属性を使う。attr(x, "key"), attr(x, "key") 名前付きlistを使う。lis$key, lis$key

三途の川

the River Styx

sessionInfo()

他人のトラブルシューティングとか、自分の環境を伝えるのに便利。 > sessionInfo() R version 3.1.3 (2015-03-09) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 7 x64 (build 7601) Service Pack 1locale: [1] LC_COLLATE=Japanese_J…

型システムとクラスシステム

Rでは、ベクトル型=アトミック型だから、アトミック型は、 logical numeric complex character NULLは、奇妙なNULL型のシングルトンインスタンス。これも一応はアトミックかもしれない。複合型に、 list environment 他は特殊、または雑多。 function call …

help.search(), RSiteSearch()が便利

引数は検索文字列。

リストに==が使えない

リストもベクトルの一種とか言っておきながら。まー、「リストもベクトルの一種」が嘘だがな。