« 2020年12月 | トップページ | 2021年2月 »

2021年1月31日 (日)

[Fortran]write文で出力時に改行させない

$かadvanceオプションにnoを指定する。

write(*,'(a)') 'AB'
write(*,'(a)') 'CD'
write(*,'(a,$)') '12'
write(*,'(a)') '34'
write(*,'(a)',advance='no') '56'
write(*,'(a)') '78'
end

実行結果

>a.exe
AB
CD
1234
5678

GNU Fortran 8.2.0で動作確認をしている。

2021年1月24日 (日)

[R]ベクトルから時系列オブジェクトを作る

ts関数を使う。以下は、1~36の36個の要素からなる数値型ベクトルから時系列オブジェクトを作成した例。

ただ数値が並べられただけの時系列オブジェクト。

> ts(1:36)
Time Series:
Start = 1
End = 36
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[18] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
[35] 35 36

観測データが1周期に12個である場合。

> ts(1:36, frequency = 12)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 1 2 3 4 5 6 7 8 9 10 11 12
2 13 14 15 16 17 18 19 20 21 22 23 24
3 25 26 27 28 29 30 31 32 33 34 35 36

同様に1周期に観測データが12個で、その開始時刻を1、周期の開始を1とした場合。

> ts(1:36, frequency = 12, start = c(2000, 1))
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 13 14 15 16 17 18 19 20 21 22 23 24
2002 25 26 27 28 29 30 31 32 33 34 35 36

2021年1月 9日 (土)

[Fortran]サブルーチンの引数にサブルーチンを指定する

external文を使用すると、サブルーチンの引数に変数や配列以外に、サブルーチンを指定することもできる。以下はWindowsのgfortranで実行した例。説明を簡単にするために、簡略化して記述しているので注意。

メインルーチンで、サブルーチンsub1を呼び出しているが、そのsub1を呼び出し時に、引数にsub2を指定し、sub1ではその指定されたsub2をさらに呼び出している。メインルーチンで、呼び出される側で呼び出すサブルーチンをexternal文で指定しておく必要がある。

external sub2
call sub1(sub2, 10)
end

subroutine sub1(sname, n)
integer n
write(*, '(a,1x,i3)') 'A', n + 1
call sname(n + 2)
write(*, '(a,1x,i3)') 'C', n + 3
end subroutine

subroutine sub2(n)
integer n
write(*, '(a,1x,i3)') 'B', n
end subroutine

実行結果

>a.exe
A 11
B 12
C 13

2021年1月 7日 (木)

[R]数値型ベクトルの宣言と初期化

数値の計算をするために変数(ベクトル)を使うには、その数値を格納する領域とそれに名前を与える必要がある。これを宣言という。

整数はinteger関数、実数はdouble関数を使って宣言する。引数に何も与えないと長さが0のベクトルを作成する。ベクトルの長さを得るにはlength関数を使う。

> n
エラー: オブジェクト 'n' がありません
> n <- integer()
> n
integer(0)
> length(n)
[1] 0
> n <- integer(3)
> n
[1] 0 0 0
> length(n)
[1] 3
> n[2] <- 4
> n
[1] 0 4 0
> d <- double(4)
> d
[1] 0 0 0 0
> d[4] <- 1.23
> d
[1] 0.00 0.00 0.00 1.23

Rでは数値型は基本的に実数のため、integer関数で作成したベクトルも、実数を代入することができる。

> n[3] <- 4.5
> n
[1] 0.0 4.0 4.5

2021年1月 6日 (水)

[R]BOM(バイトオーダーマーク)が付いたファイルを読み込む

fileEncodingオプションを使う。BOMが付いたUTF-8の場合はUTF-8-BOMを指定する。UTF-16の場合はUTF-16を指定するとそのまま読み込んでくれる。以下は、read.csv関数を使用した例。

以下の3行を、それぞれBOM付きのUTF-8、UTF-16形式で、bomutf8.csv、bomutf16.csvで保存する。

no,姓,名
1,佐藤,太郎
2,鈴木,次郎

read.csv関数で読み込む。

> dtf <- read.csv("bomutf8.csv")
make.names(col.names, unique = TRUE) でエラー:
'サno' に不正なマルチバイト文字があります
> dtf <- read.csv("bomutf8.csv", fileEncoding = "UTF-8-BOM")
> dtf
no 姓 名
1 1 佐藤 太郎
2 2 鈴木 次郎
> dtf <- read.csv("bomutf16.csv", fileEncoding = "UTF-16")
> dtf
no 姓 名
1 1 佐藤 太郎
2 2 鈴木 次郎

BOMについてはこちらを参照。

RのBOMの扱いについてはconnectionsのヘルプを参照。

> ?connections

2021年1月 4日 (月)

[R]R本体のバージョンを確認する

R.Version関数を使う。以下、とある環境下での実行例。

> R.Version()
$platform
[1] "x86_64-w64-mingw32"
$arch
[1] "x86_64"
$os
[1] "mingw32"
$system
[1] "x86_64, mingw32"
$status
[1] ""
$major
[1] "3"
$minor
[1] "6.2"
$year
[1] "2019"
$month
[1] "12"
$day
[1] "12"
$`svn rev`
[1] "77560"
$language
[1] "R"
$version.string
[1] "R version 3.6.2 (2019-12-12)"
$nickname
[1] "Dark and Stormy Night"

例えば、バージョン番号だけを文字列で取り出したいのであれば、以下のようにする。

> paste(R.Version()$major, R.Version()$minor, sep = ".")
[1] "3.6.2"

2021年1月 1日 (金)

[R]無料ですぐに使えるサンプルデータを確認する

Rには、数値計算に使えるサンプルデータが標準で収録されている。標準で読み込まれるパッケージ(datasets)に多数含まれている。含まれているデータを確認するには、data関数を使う。

> data()

Sampledata

これらのデータはそのまますぐに使うことができる。

> AirPassengers
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
(以下、表示省略)

« 2020年12月 | トップページ | 2021年2月 »

無料ブログはココログ

■■

■■■