[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で動作確認をしている。
« 2020年12月 | トップページ | 2021年2月 »
$か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で動作確認をしている。
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
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
数値の計算をするために変数(ベクトル)を使うには、その数値を格納する領域とそれに名前を与える必要がある。これを宣言という。
整数は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
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
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"
Rには、数値計算に使えるサンプルデータが標準で収録されている。標準で読み込まれるパッケージ(datasets)に多数含まれている。含まれているデータを確認するには、data関数を使う。
> data()
これらのデータはそのまますぐに使うことができる。
> 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
(以下、表示省略)