■Rについて

RとMathematicaの文字コードの違いに関する覚え書き.R関連はTeXで有名な奥村先生のWebページからの引用,レイアウト・文章表現など一部調整.

    



■Mathematicaで日付を数値に直す方法:
http://reference.wolfram.com/mathematica/tutorial/DateAndTimeFunctions.ja.html

tempdate = DateList[{"2006/10/30", {"Year", "Month", "Day"}}]
Out: {2006, 10, 30, 0, 0, 0.}

tempdate[[1]]*10000 + tempdate[[2]]*100 + tempdate[[3]]
Out: 20061030


■Mathematicaでデータのファイル出力と区切りの変更について
(* Mathematica 7での出力では,それ以前と区切りが異なり,変更が必要な場合有り. *)
Export["出力先ファイル名", 変数, "Table", "FieldSeparators" -> " "];


■Mathematicaでのディレクトリの確認と操作について

カレントディレクトリの確認:Directrory[]

カレントディレクトリの変更:SetDirectory["E:\\temp\\data\\user"]

補足:データを読み込むだけなら当該ディレクトリをpathに加えても良い.
ただし,同名のファイル名を使い回すときには,あらぬファイルを読み込む可能性があり注意する.
AppendTo[$Path, "E:\\temp\\data\\user"];

■Mathematicaにおける相対パスによる移動
(* カレントディレクトリの設定 *)
SetDirectory["C:\\aaaa\\bbbb"];
(* カレントディレクトリの確認 *)
Directory[]
結果:C:\\aaaa\\bbbb

(* 相対パスで指定された下位ディレクトリに移動 *)
SetDirectory["cccc"]
結果:C:\\aaaa\\bbbb\\cccc

(* 相対パスで元の(=一つ前の)ディレクトリに戻る *)
SetDirectory["..\\"]
結果:C:\\aaaa\\bbbb



■Mathematicaにおける並べ替え
(* データの入力 *)
tempd = {
{"id", "gender", "date"},
{"a", "m", 20140405 },
{"b", "f", 20140305},
{"c", "m", 20140307},
{"d", "f", 20140403}
}
(* 並べ替え 上記データの第3列の要素の小さい順に *)
Sort[tempd, #1[[3]] < #2[[3]] &]

結果:
{{"id", "gender", "date"}, {"c", "m", 20140305}, {"b", "f",
20140305}, {"d", "f", 20140403}, {"a", "m", 20140405}}




■# Rでのディレクトリの確認と移動について

# カレントディレクトリの設定
setwd("C:/myr/kubo_chap3")

# カレントディレクトリの確認
getwd()

# 一つ上のディレクトリへ移動
setwd("../")

# 相対パスでディレクトリの移動
setwd("./kubo_chap3")

■ Mathematicaでの個人定義の関数をファイル保存して呼び出す.
step1: 関数をmathematicaで各
step2: ファイル→新規作成→パッケージで,適当なフォルダに,"ファイル名.m"で保存する.
step3: 関数を使用したいときには
Get["C:\\フォルダ名\\ファイル名.m"]
とする.
(カレントフォルダに"ファイル名.m"が存在するときにはフォルダの指定は省略できる.


■ Mathematicaでのデータの保存で,ファイル名に変数を利用する方法:
例:
Export["ajm_" <> timeid <> typenet <> "_" <> ToString[aaa] <> ToString[bbb] <> ".csv", ajm]
(*
<>は文字列をつなげるコマンド
timeidやtypenetは文字列の入っている変数,
aaaやbbbは数値が入っている変数であり,ToString[]で文字列に変換している
*)

■ Rで全て1の要素を持つ縦ベクトル
# 人数分(n)の1を要素にもつ縦ベクトル
n <- 10 # 人数の設定
a <- matrix(rep(1, n), nrow=n, ncol=1)
# 総人数
(tn <- t(a) %*% a)


■ Rで行列(mym)で特定の要素(条件式:>= 1)を置換(ここでは1に)する.
mym[which(mym >= 1)] <-1

■ Rで行列(mym)で対角要素を置換(ここでは0に)する.
diag(mym) <- 0


■ Mathematicaで他のmathematicaファイル(*.nb)を実行する
(* 他のnbファイルを開く *)
nb = NotebookOpen[
"E:\\フォルダ名\\mytest.nb"];
(* 全てのセルを範囲指定 *)
SelectionMove[nb, All, Notebook];
(* 実行(=評価)をする *)
SelectionEvaluate[nb];


■ Mathematicaの行や列の抽出

行列mymの1行目
mym[[1]],もしくは,mym[[1, All]]

行列mymの1列目
mym[[All, 1]],もしくは,Transpose[mym][[1]]

注:RならAllはいらず,なにも表記しない.



■ RSienaのxtableでのhtmlオプションの確認:

Rate parameters:
0.1 Rate parameter period 1 6.68 ( 1.15 )
0.2 Rate parameter period 2 5.23 ( 0.87 )
Other parameters:
1. eval outdegree (density) -2.71 ( 0.13 ) -0.02
2. eval reciprocity 2.43 ( 0.23 ) -0.02
3. eval transitive triplets 0.63 ( 0.14 ) -0.07
4. eval 3-cycles -0.07 ( 0.28 ) -0.05
5. eval smoke1 similarity 0.26 ( 0.21 ) -0.07
6. eval alcohol alter -0.02 ( 0.07 ) 0.09
7. eval alcohol ego 0.03 ( 0.08 ) 0.02
8. eval alcohol ego x alcohol alter 0.13 ( 0.05 ) 0.02


■ RSienaでワークスペースを消去する.(つまり,変数,関数,オブジェクトなど全て消去)
rm(list=ls())
# ls() はワークスペースを表示するという関数

■ Rでデータ形式の確認(matrix, data.frameなど)
class(***)
ベクトルかどうかを特に調べる(classで確認して,numericの時に)
is.vector(***)

■ Mathematicaでリストの中に文字や""がある場合に,数値だけを取り出す方法:
数値を取り出すという考え方:
Select[{3, "", "a", 4, 5}, NumberQ]

文字を取り除くという考え方:
DeleteCases[{3, "", "a", 4, 5}, _String]

■ Mathematicaで文字列を分解して,その中で特定の文字だけを取り出す方法:
tempwords="あいうえお"
wordslist="うえ"
"あいうえお"のなかで"うえ"に含まれる文字である
{"う", "え"}というリストを得る.
Select[
Characters[tempwords], MemberQ[Characters[wordslist], #] &
]

■ Mathematicaの手続き型関数の定義
(ドキュメントセンターでは「手続き型関数の定義」で検索)

:=のあとを手続き部分を()でくくる
関数の戻り値は()のなかの最後の式の結果となる

関数全体の戻り値は,手続きの最後の式に対する結果である.関数をこのように定義するときは,丸カッコで手続きの部分をくくることに注意.

f[x_ , y_] := (z = x + y; z^2)

補足1:
したがって,以上で最後に;を加えると,戻り値は無くなる.

補足2:
関数内での変数(ここではz)と外部での変数との干渉を避けたい場合は,
f[x_ , y_] := Module[{z}, z = x + y; z^2]
とする.
例:
In[15]:= z = 8
Out[15]= 8

In[16]:= f[x_, y_] := Module[{z}, z = x + y; z^2]

In[17]:= f[2, 3]
Out[17]= 25

In[18]:= z
Out[18]= 8


逆にいうと,関数内でもちいた変数を用いたい場合はModuleで保護しない:
例:
In[19]:= z = 8
Out[19]= 8

In[20]:= f[x_ , y_] := (z = x + y; z^2)

In[21]:= f[2, 3]
Out[21]= 25

In[22]:= z
Out[22]= 5


■ Mathematicaで二つの対応したリストがあり,一方のリストで性質を満たす,他方のリストの要素を抽出:

○直接Positionを用いる方法:
In[356]:=
list1 = {"あ", "い", "う", "え"};
list2 = {1, 2, 1, 4};
target = 1;
Table[
list1[[i]], {i, Flatten[Position[list2, target]]}
]

Out[359]= {"あ", "う"}


○Selectを用いる方法:
In[30]:= list1 = {"あ", "い", "う", "え"};
list2 = {1, 2, 1, 4};
target = 1;
templist = {list1, list2}
selectlist = Select[Transpose[templist], #[[2]] == target &] (* 抽出 *)
Transpose[selectlist][[1]](* ひらがなだけのリストを取り出す *)


Out[33]= {{"あ", "い", "う", "え"}, {1, 2, 1, 4}}
Out[34]= {{"あ", 1}, {"う", 1}}
Out[35]= {"あ", "う"}



■ jsarticleには英語オプションがあり,日付,概要などの表記を英語にできる
\documentclass[a4paper,10pt, english]{jsarticle}

■ TeXで途中から節番号をかえる
\setcounter{section}{3}

■ Rで複数行コメントアウト
f(0){
複数行
複数行
}

秀丸でencomment.mac, uncomment.macを使用して,秀丸上で操作.
このマクロはすでに使われていないらしいが,十分に使える.
rファイルの指定として,
$Suffixes[7] = ".r";
$LineBegin[7] = "#"; $RegionBegin[7] = ""; $RegionEnd[7] = "";
を加える.

■ Rでspdep関係
● Rをインストール後,spdepを利用する時の作業に関連して.
package graphはzipから,ただし,単体ではダメで,追加でBiogenericsも必要となる.


■ Mathematica Tableコマンド <--> Rでのコマンド

●MathematicaでのTableコマンド
Table[
i + 1 (* function part *)
, {i, 1, 10} (* list part *)
]

出力:{2, 3, 4, 5, 6, 7, 8, 9, 10, 11}

●Rでの再現:
# function part
myf <- function(x){
x +1 # describing function
}
# list part
myi <- c(1:10)
# creating result part
mapply(
myf # function part
, myi # lsit part
)

出力: 2 3 4 5 6 7 8 9 10 11


■Rの色指定
col=番号で指定する.1から順に「黒,赤,緑,青,水色,紫,黄,灰」となっている.

■YaTeX
(1) 即時入力の追加と変更:C-c, C-b, aでalignとした.Yatex.elファイルの470行あたりを編集.C-c, C-b, dでdescription, C-c, C-b, Dでdocumentとした.
  (Yatex.elは読み込み専用だったので,一度,別ファイルとして保存して,編集する.)
(2) コンパイルの設定がjBibTeXなのでpBibTeXに変更する.
(3) 自動改行はonとするが,Emacsの幅(100文字)マイナス4文字の96文字に指定する.
  指定先はYatex.elファイルのYaTeX-fill-columnのところ.

■RefTeX
C-c, '=' でtable of contents が別ウィンドウに表示される.
ここで,たて分割をして,画面を合計3画面にするとTeX編集時に快適.

■Iiyama ノートパソコン
Caps LockをCtrlに変更しても,画面に"Caps Lock"と表示されるのを解除するには,
起動時に立ち上げられる,Hkey関連のソフトを立ち上げないようにする.

■BibTeX関連,jecon関連
バックアップの便宜として,特定のフォルダに固定したいため,
\bibliographystyle{C:フォルダ名/スタイルファイル名}
\bibliography{C:フォルダ名/bibファイル名}
として,フルパスで指定する.
(なお,bibliographystyleのところでは,これまの指定の保存先では,TeXが読み込んでくれない.)
(jeconの解凍後のsjisフォルダのスタイルファイルはひとつ古いバージョンなので,utf8のものを素直に変換する.)




戻る