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

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

R言語

隠された名前を見る

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

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()が便利

引数は検索文字列。

リストに==が使えない

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

空なシンボルが作れない

R言語メタプログラミングの基礎:補足 - 檜山正幸のキマイラ飼育記 結局、quote(expr=) 。as.character(quote(expr=)) は確かに空文字列。対称性がなさ過ぎ。

なぜfunctionだけは呼び出せない

R言語メタプログラミングの基礎:補足 - 檜山正幸のキマイラ飼育記 `(`関数や`{`関数でさえ、バッククォート(バックチック)すれば呼び出せる。のに、`function`だけは呼び出せない。これは何なんだ。callでコールオブジェクト作ってevalするって異常。`fun…

localとwith

名前空間の制御には、localとwithがある。なかなか使えるヤツ。

エンコーディング指定は、fileEncoding=

> (dcsv("data.csv", fileEncoding="utf-8"))

等値性と論理ベクトル

比較の結果は長い方に揃える、と思いきや。 > length(1) [1] 1 > length(c(1, 2)) [1] 2 > 1 == c(1, 2) [1] TRUE FALSE > length(numeric(0)) [1] 0 > mode(numeric(0)) [1] "numeric" > 1 == numeric(0) logical(0) >

allとanyの語の選び方がどうなの?

論理ベクトル(真偽値のベクトル)に対して、それを集約する関数allとanyがあるが: allは∀に対応 anyは∃に対応 for all x と for any x は同義で使われることがあるのを考えると、anyって語はマズイよね。all, anyがany, someってことだってあるし。all, so…

モードとタイプの食い違い

> mode(as.name("a")) [1] "name" > mode(1) [1] "numeric" > typeof(1) [1] "double" > mode(1L) [1] "numeric" > typeof(1L) [1] "integer" > これはまーいい。typeofのほうが詳しいと思えばいい。 > mode(as.symbol("a")) [1] "name" > typeof(as.symbol(…

インデックス/キーの範囲外、NULLの解釈が酷いの一言

準備。 > vec > lis > env > env$a 試す。 > vec[4] [1] NA > vec[[4]] 以下にエラー vec[[4]] : 添え字が許される範囲外です > lis[4] $ NULL > lis["d"] $ NULL > lis[[4]] 以下にエラー lis[[4]] : 添え字が許される範囲外です > lis$d NULL > lis[["d"]]…

ブラケットとダブルブラケットとダラー

ブラケット演算子`[`は第二引数に数値ベクトル/名前文字列ベクトルを取るスライス演算を意味する。ほんとに成分(構成要素)を取り出すのはダブルブラケット演算`[[`。ダラー$はダブルブラケット演算のシンタックスシュガーと思えばいいだろう。 iris[["Sep…

ゼロと負のインデックスと空ベクトル

長さゼロのベクトル(空ベクトル)は存在すると考えたほうがいいようだ。長さが0になっても、型情報だけが残り、それがインデックスゼロでアクセス可能。あるいは、インデックス0が特別に長さ0のスライスを表している、とも解釈できる。インデックスゼロで型…

サンプル関数

createCounter <- function(init = 0) { value <- init function(count = 1) { if (!exists("delta")) delta <- 1 value <<- value + delta*count value } }

CRANミラーサーバーのサイトを切り替える

"http://cran.md.tsukuba.ac.jp/" が調子悪いので、"http://cran.ism.ac.jp/" にした。次の関数を定義した。 setCranSite <- function(site) { options(repos= local({ r <- getOption("repos"); r["CRAN"] <- site; r }) ) }

パッケージ関係

とりあえず関数名/変数名。関数か変数か、先頭ドットが付くか付かないか、などがバラバラ。名前が整理されてないと記憶が困難(ルール無しで腕力記憶)。 find.package() installed.packages() search() .packages(TRUE) path.package() .Autoloaded .Libra…

処理系とライブラリのメタ情報

統計処理言語Rのインストールと設定(ほぼプラットフォーム非依存) - 檜山正幸のキマイラ飼育記 の最後のほうに書いたのも含まれるけど: R.Version() R.version version R.home() .Pratform .libPaths() .Library .Library.site path.package() installed.…

パッケージ関係

とりあえず関数名/変数名。関数か変数か、先頭ドットが付くか付かないか、などがバラバラ。 find.package() installed.packages() search() .packages(TRUE) path.package() .Autoloaded .Library .Library.site .libPaths()

options()と.Options

内容は同じだが型が違う。 options() は list .Options は pairlist getOptions()つう関数もある。

named xxx型

独立した型ではない。xxx型のベクトルにnames属性で名前(文字列)のベクトルを付ける。すると、文字列キーで引けるxxx型ハッシュのように使える。

名前空間/環境関係の関数

「環境」というと、「プログラミング環境」とかでも使うので、環境オブジェクトがいいかも。関数の詳細はhelpで調べる。 search() 名前のサーチパスを表示する。並びは、親子関係によるlinked listになっている。 library() サーチパスにライブラリ(パッケ…

やり直し

使っている時はいいけど、使わないと忘れるのでマトメが必要だ。パッケージマネージャ的な使い方 CRANリポジトリの設定と変更 CRANのパッケージリスト CRANの検索、特定パッケージ、パターン インストールされているパッケージの一覧 特定のパッケージがイン…

処理系のバージョン確認

R.Version() または version で表示される。目で見るだけなら version が便利。