« 2020年7月 | トップページ | 2020年9月 »

2020年8月27日 (木)

[R]パッケージに格納されている関数を直接指定して使う

Rは柔軟な使用のため、基本的な機能すら関数として搭載されており、そのために、自作の関数を既存の基本的な関数名に割り当てることが可能である。このようなことは本来は進められないが、「パッケージ名::○○」とすることで、パッケージに含まれている関数を直接呼び出して使うことができる。

以下の例は、正弦関数を計算する標準的なsin関数がある一方で、別の自作関数名にsinを割り当て、そのような状態で標準のsin関数を呼び出した例。

> sin(pi)
[1] 1.224606e-16
> sin <- function(d) {return(9)}
> sin(pi)
[1] 9
> base::sin(pi)
[1] 1.224606e-16

2020年8月26日 (水)

[R]インストール時に一緒にインストールされたパッケージの一覧表示

library関数を使う。

> library(lib.loc = .Library)

別ウィンドウが表示され、R本体と一緒にインストールされたパッケージの一覧が表示される。以下、表示例。

Imag

 

2020年8月21日 (金)

[R]行列式を求める

det関数を使う。

> d <- c(1, 2, 3, 4)
> mx <- matrix(d, 2, 2, byrow = TRUE)
> mx
[,1] [,2]
[1,] 1 2
[2,] 3 4
> det(mx)
[1] -2

2020年8月17日 (月)

[Python]QR分解を行う

行列AをQR分解で行列Qと行列Rに分解することを考える。

A = Q R

行列QはQTQ=I(Iは単位行列)となる直交行列。行列Rは上三角行列(対角成分と対角成分より上の要素はすべて0以外で、対角成分より下の要素はすべて0)。

linalg.qrを使うと、それぞれQR分解した際の行列Qと行列Rが得られる。

>>> import numpy as np
>>> import scipy.linalg as linalg
>>> a = np.array([[1, 2, 3], [4, 5, 6], [9, 9, 8]])
>>> print(a)
[[1 2 3]
[4 5 6]
[9 9 8]]
>>> q, r = linalg.qr(a)
>>> print(q)
[[-0.10101525 -0.71840915 -0.6882472 ]
[-0.40406102 -0.60253671 0.6882472 ]
[-0.90913729 0.34761733 -0.22941573]]
>>> print(r)
[[ -9.89949494 -10.40457121 -10.00051019]
[ 0. -1.32094586 -2.98950905]
[ 0. 0. 0.22941573]]

QTQ = I となるか試す。

>>> print(np.dot(q.T, q))
[[ 1.00000000e+00 -1.50980479e-16 -9.33624473e-17]
[-1.50980479e-16 1.00000000e+00 1.17405362e-16]
[-9.33624473e-17 1.17405362e-16 1.00000000e+00]]

2020年8月16日 (日)

[GNU Fortran]ファイル(ディレクトリ)の存在を確認

access関数を使う。第一引数に存在の有無を確認したいファイル名かディレクトリ名。第二引数に「r」を指定する。第一引数に指定をしたファイル(ディレクトリ)が存在した場合は0、存在しない場合は0以外を返す。

program test
implicit none
integer n
n = access('C:\Windows', 'r')
print *, n
n = access('C:\Win', 'r')
print *, n
n = access('C:\Windows\write.exe', 'r')
print *, n
n = access('C:\Windows\wri.exe', 'r')
print *, n
n = access('C:\Windows\', 'r')
print *, n
n = access('C:\Windows\write.exe\', 'r')
print *, n
end program test

出力結果(環境により異なる)。

>test.exe
0
2
0
2
0
22

ファイルかディレクトリの判別は、上記の最後2つの例のとおりに、第一引数のパスの最後にパス区切り文字(ウィンドウズの場合は¥)を付ける。パス区切り文字を最後に付けると、それはディレクトリと判断して存在の有無が確認される。

access関数はGNU拡張機能(GNU extension)であることに注意。

2020年8月15日 (土)

[Octave]QR分解を行う

行列AをQR分解で行列Qと行列Rに分解することを考える。

A = Q R

行列QはQTQ=I(Iは単位行列)となる直交行列。行列Rは上三角行列(対角成分はすべて0以外で、対角成分より下の要素はすべて0)。

qr関数を使うと、それぞれQR分解した際の行列Qと行列Rが得られる。

>> a = [1, 2, 3; 4, 5, 6; 9, 9, 8]
a =
1 2 3
4 5 6
9 9 8
>> [q, r] = qr(a)
q =
-0.10102 -0.71841 -0.68825
-0.40406 -0.60254 0.68825
-0.90914 0.34762 -0.22942
r =
-9.89949 -10.40457 -10.00051
0.00000 -1.32095 -2.98951
0.00000 0.00000 0.22942

QTQ = I となるか試す。

>> q' * q
ans =
1.0000e+00 -9.5469e-17 3.7850e-17
-9.5469e-17 1.0000e+00 7.4583e-17
3.7850e-17 7.4583e-17 1.0000e+00

2020年8月12日 (水)

[R]インストールされているパッケージを一覧で確認する

library関数を使う。引数に何も与えないと、インストールされているパッケージが別ウィンドウで一覧で表示される。

> library()

別ウィンドウに以下のような表示(フォルダー名やパッケージなどは環境により異なる)がされているはず。

パッケージ (ライブラリ ‘C:/Users/○○/Documents/R/win-library/3.○’ 中): 
(表示省略)
ggplot2 Create Elegant Data Visualisations Using the Grammar of Graphics
(表示省略)
パッケージ (ライブラリ ‘C:/Program Files/R/R-3.○.○/library’ 中):
base The R Base Package
(表示省略)

厳密には違うが、前者のフォルダー(Users以下)は、install.packages関数で後から追加をしたパッケージが格納され、後者のフォルダー(Program files以下)には、そのRをインストールした際に、一緒にインストールされた標準的なパッケージが格納されている。

 

2020年8月 9日 (日)

[R]日付型ベクトルから年、月、日を取り出す

POSIXlt型ベクトルかformat関数を使う。

POSIXlt型ベクトルは、日付の構成要素(年、月、日など)を簡単に取り出せる。年はyear、月はmon、日はmday。ただしyearは1900からの通算数、monは0からの通算数であることに注意。

format関数は日付型ベクトルを文字型ベクトルに変換する関数だが、得られた文字列を数値型ベクトルに変換すればよい。

> today <- as.Date("2020-07-23")
> as.POSIXlt(today)$year + 1900
[1] 2020
> as.integer(format(today, "%Y"))
[1] 2020
> as.POSIXlt(today)$mon + 1
[1] 7
> as.integer(format(today, "%m"))
[1] 7
> as.POSIXlt(today)$mday
[1] 23
> as.integer(format(today, "%d"))
[1] 23

①POSIXlt型ベクトルを使う、②format関数とas.integer関数を組み合わせて使う、どちらの処理が早いかsystem.time関数で計測してみる。

> date1 <- as.Date("1000-01-01")
> date2 <- as.Date("3000-12-31")
> dateall <- seq(date1, date2, by = "day")
> length(dateall)
[1] 730850
> system.time(as.POSIXlt(dateall)$mon + 1)
ユーザ システム 経過
0.53 0.00 0.53
> system.time(as.integer(format(dateall, "%m")))
ユーザ システム 経過
1.99 0.02 2.00

POSIXlt型ベクトルを使う①の処理が圧倒的に早いため、①の手順で行ったほうがよい。

2020年8月 8日 (土)

[R]QR分解を行う

行列XをQR分解で行列Qと行列Rに分解することを考える。

X = Q R

行列QはQTQ=I(Iは単位行列)となる直交行列。行列Rは上三角行列(対角成分はすべて0以外で、対角成分より下の要素はすべて0)。

qr.Q関数、qr.R関数を使うと、それぞれQR分解した際の行列Qと行列Rが得られる。引数にはqrオブジェクトを与える必要があり、qr関数を使ってあらかじめ分解したい行列Xからqrオブジェクトを作成しておく必要がある。

> d <- c(1, 2, 3, 4, 5, 6, 9, 9, 8)
> x <- matrix(d, 3, 3, byrow = TRUE)
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 9 9 8
> objqr <- qr(x)
> q <- qr.Q(objqr)
> q
[,1] [,2] [,3]
[1,] -0.1010153 -0.7184092 -0.6882472
[2,] -0.4040610 -0.6025367 0.6882472
[3,] -0.9091373 0.3476173 -0.2294157
> r <- qr.R(objqr)
> r
[,1] [,2] [,3]
[1,] -9.899495 -10.404571 -10.0005102
[2,] 0.000000 -1.320946 -2.9895090
[3,] 0.000000 0.000000 0.2294157

QTQ = I となるか試す。

> t(q) %*% q
[,1] [,2] [,3]
[1,] 1.000000e+00 -1.110223e-16 -1.665335e-16
[2,] -1.110223e-16 1.000000e+00 -9.714451e-17
[3,] -1.665335e-16 -9.714451e-17 1.000000e+00
qr.X関数を使うことで、qrオブジェクトの元の行列を取り出すことができる。
> qr.X(objqr)
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 9 9 8

2020年8月 4日 (火)

[R]インストールしたパッケージのバージョンを確認する。

help関数を使い、そのパッケージのヘルプを表示させると、最初にそのバージョンが記載されている。以下、例。



> help(package = ggplot2)


次のような表示が上部にあるはず。このパッケージのインストールされているバージョンは3.3.0であることがわかる。



Documentation for package ‘ggplot2’ version 3.3.0

2020年8月 3日 (月)

[R]ナイル川の年間流量のデータ

Rに標準で搭載されているdatasetsパッケージにNileという名前で含まれている。

> Nile
Time Series:
Start = 1871
End = 1970
Frequency = 1
[1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 1110
[14] 994 1020 960 1180 799 958 1140 1100 1210 1150 1250 1260 1220
[27] 1030 1100 774 840 874 694 940 833 701 916 692 1020 1050
[40] 969 831 726 456 824 702 1120 1100 832 764 821 768 845
[53] 864 862 698 845 744 796 1040 759 781 865 845 944 984
[66] 897 822 1010 771 676 649 846 812 742 801 1040 860 874
[79] 848 890 744 749 838 1050 918 986 797 923 975 815 1020
[92] 906 901 1170 912 746 919 718 714 740
> plot(Nile)

Nile

タイムシリーズオブジェクト(time-series objects)で格納されている。

Rのヘルプによれば、期間は1871~1970年。単位は108m3。計測地点はアスワン。

2020年8月 2日 (日)

[R]パッケージに含まれる関数一覧を得る

help関数を使う。例えば、Rでもっとも標準的なパッケージである、baseパッケージに含まれている関数一覧を得る。

> help(package = base)

別ウィンドウが表示されるかブラウザがhtmlファイルを開き、そこにこのパッケージに含まれている関数の一覧が表示されるはず。関数名をクリックすれば、その関数のヘルプのページが表される。

 

« 2020年7月 | トップページ | 2020年9月 »

無料ブログはココログ

■■

■■■