« 2014年8月 | トップページ | 2014年10月 »

2014年9月22日 (月)

[R]日付型ベクトルを文字列型ベクトルに変換する

format関数を使う。例えばISOの表記(ISO 8601)に従った日付の文字列を得るには、以下のようにすればよい。

> da <- c(as.Date("2014-01-02"), as.Date("2015-12-30"))
> da
[1] "2014-01-02" "2015-12-30"
> st <- format(da, "%Y-%m-%d")
> st
[1] "2014-01-02" "2015-12-30"
> mode(st)
[1] "character"

2014年9月14日 (日)

[R]オブジェクト(ベクトルやリスト)を削除する、一括で削除する

Rは使用したオブジェクト(ベクトル、リストなど)はそのままその環境に残り、再利用することができる。この環境に残っているオブジェクトはls関数で確認することができる。

> d1 <- c(0.1, 0.2, 0.3)
> d2 <- c(10, 20, 30)
> ls()
[1] "d1" "d2"

オブジェクトを削除するには、rm関数を使う。

> d1
[1] 0.1 0.2 0.3
> rm(d1)
> d1
エラー:  オブジェクト 'd1' がありません
> ls()
[1] "d2"

オブジェクトを一括ですべて削除するには、listオプションにls関数を指定して行う。

> rm(list = ls())

ただし、ls関数はオブジェクト名が「.」(ドット)で始まるオブジェクトは返さないので、これでは削除されない。すべてのオブジェクトを削除するには、ls関数のall.namesオプションにTRUEを指定する。

> rm(list = ls(all.names = TRUE))

ls関数のオプションall.namesについては、ヘルプに以下のように書かれている。

all.names
a logical value. If TRUE, all object names are returned. If FALSE, names which begin with a . are omitted.

はじめてのR: ごく初歩の操作から統計解析の導入まで RStudioではじめるRプログラミング入門 Rによるデータサイエンス データ解析の基礎から最新手法まで Rによる機械学習 (Programmer's SELECTION) Rによるやさしい統計学 R言語徹底解説 Rによるやさしいテキストマイニング R言語上級ハンドブック

2014年9月13日 (土)

[R]layout関数を使用して複数のグラフを書いたものをEPS形式で出力すると、不要な余白が付く

layout関数を使用して複数のグラフを並べて書いたものをdev.copy2eps関数でEPS形式で出力すると、EPSファイルに不要な余白が付くことがある。これは、何度か試しに図を描画して、その描画ウィンドウを閉じることなく大きさを変えてそのままにしていると、不要な余白が付く。

これは、dev.copy2eps関数は作図デバイスを出力しようとしていることから、その出力ウィンドウの形を変えてしまうと、その変えた状態で出力されてしまう。

具体的な対策としては、layout関数を使用して描画する前は、最初にframe関数を実行して、グラフを消去すること。そうすることで、描画するときは作図デバイスが新たに作成されて、不要な余白が付かないで出力される。

2014年9月12日 (金)

[R]インターネットにつながっていないコンピューターで新たなパッケージをインストールする

パッケージを新たにインストールするとき、インターネットに接続しているコンピューターであれば、install.packages関数を使うと自動で簡単にインストールできる。しかし、インターネットに接続していない(あるいは調子が悪い)コンピューターではこの方法は行えない。

例えば、以下はインターネット接続に問題があるコンピューターでパッケージxlsxをインストールしたときの例。Rはウィンドウズ版でバージョンは3.0.x。リポジトリは筑波大学のサーバーを選択している。

> install.packages("xlsx")
Installing package into ‘C:/Users/○○/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
--- このセッションで使うために、CRAN のミラーサイトを選んでください ---
警告:  リポジトリー http://cran.md.tsukuba.ac.jp/bin/windows/contrib/3.0 に対する索引にアクセスできません 
(以下、表示省略)

パッケージを手作業でインストールすることもできる。その例を以下に示す。以下はバージョン3.0.xにパッケージxlsxを手動でインストールする例。

まずこのhttp://cran.md.tsukuba.ac.jp/bin/windows/contrib/3.0/をブラウザで開く。

パッケージのファイル(*.zip)が大量に置かれている。2014年7月現在、パッケージxlsxの最新版はxlsx_0.5.5.zip。これをダウンロードする。置いた場所をC:\WORKとする。ちなみに、これらのファイルは「_」(アンダーバー)より左の文字がパッケージ名、右がバージョン、という命名則でファイル名が付けられている。

パッケージを手動でインストールする。

> install.packages("C:/WORK/xlsx_0.5.5.zip")
Installing package into ‘C:/Users/○○/Documents/R/win-library/3.0’
(as ‘lib’ is unspecified)
ファイル名から 'repos = NULL' を推測
パッケージ ‘xlsx’ は無事に展開され、MD5 サムもチェックされました

これでインストールされた。パッケージのファイルはこの例ではC:\Users\○○\Documents\R\win-library\3.0\xlsxに展開されていろいろ置かれている。インストールし使用したzipファイルは削除してかまわない。

パッケージを使うには以下のようにすればよい。

> library(xlsx)

ただし、この例ではxlsxは他のパッケージを必要とするため、以下のとおりにエラーメッセージが表示されて使うことができない。

要求されたパッケージ rJava をロード中です
エラー:  パッケージ ‘rJava’ をロードできませんでした
(以下表示省略)

これは、パッケージxlsxのインストールには成功したものの、パッケージrJavaも別途必要のため自動でインストールを試みたが、インストールされておらず失敗したということ。

この場合は、パッケージrJavaを手動でダウンロードして手動でインストールする必要がある。そして再度library関数を実行する。他のパッケージがまだ必要であれば、面倒だが延々と繰り返すことになる。

2014年9月11日 (木)

[R]図の任意の位置に画像ファイルを貼り付ける

Rの基本機能のグラフィック(plot関数、points関数など)で作成した図に画像ファイルを簡単に貼り付けることができる。貼り付けるには、pixmapパッケージのaddlogo関数を使用すればよい。

以下はpixmapパッケージに付属のサンプル画像(PNM形式、.ppm)の画像ファイルをplot関数、points関数と共に使用した例。

addlogo関数のpx、pyオプションに指定をした範囲に画像が貼り付けられる。縦横比が画像と異なる場合はその範囲に合うように伸縮されて貼り付けられる。当然、縦横比は合わなくなるので注意。

> install.packages("pixmap")
> library(pixmap)
> # サンプルの画像ファイルの読み込み
> # (警告があるかもしれないが無視してかまわない)
> g <- read.pnm(system.file("pictures/logo.ppm", package = "pixmap")[1])
> plot(g)  # とりあえずサンプル画像を表示
> x <- 1:10  # 描画サンプルのためのデータ
> y <- 1:10  # 同上
> plot(x, y)  # サンプル画像を消してサンプルデータをプロット
> # 読み込んだサンプル画像を2点(1,1)、(6,3)の範囲に描画
> addlogo(g, px = c(1, 6), py = c(1, 3))
> # 図を重ねて描画できる
> addlogo(g, px = c(4, 6), py = c(2, 8))
> # プロット点を図の上に描画する
> points(x, y, col = "red")
> # 図の枠線からはみ出でたところは描画されない
> addlogo(g, px = c(-2, 20), py = c(-5, 12))

最後の、図の枠線からはみ出た範囲で描画することについて、理由はよくわからないが、画像を描画すると図の枠線の上に書かれてしまう。この原因は不明。なお、画面上は図の枠線に上書きされていても、dev.copy2eps関数を使用してEPS形式でファイルに出力すると、枠線はきちんと描画される。ただし、dev2bitmap関数でBMP形式で出力した画像ファイルでは枠線は上書きされた状態である。原因は不明。

2014年9月 9日 (火)

[R]オブジェクトについて

Rでは、扱うものを(ほぼ)すべて、それぞれオブジェクトと呼び、あらゆる処理をオブジェクト単位で利用する。例えば、数値定数、文字型ベクトル(変数)、関数など、これらすべてが1つずつオブジェクトである。

> 1  # 1という数値定数のオブジェクト
[1] 1
> s <- "ABC"  # 中身がABCという文字型ベクトルというオブジェクトを作成する
> sin  # sinという関数のオブジェクト
function (x)  .Primitive("sin")
> print(1)
[1] 1
> print(s)
[1] "ABC"
> print(sin)
function (x)  .Primitive("sin")

2014年9月 7日 (日)

[R]同じ文字を繰り返した文字列を作る

rep関数とpaste関数を組み合わせればよい。下記は「A」が10個並ぶ文字列を作成した例。

> s <- "A"
> paste(rep(s, 10), sep = "", collapse = "")
[1] "AAAAAAAAAA"

paste関数は与えられた文字型ベクトルを連結する機能を持つが、デフォルトでは連結する文字の間に半角スペースを1つ挿入してしまうので、sepオプションに上記のように指定をする。paste関数はベクトルに対応した関数であるので、与えた文字型ベクトルを単純に連結するにはcollapseオプションも上記のように指定しないとうまく連結されないので注意。

2014年9月 6日 (土)

[R]文字列の長さ(バイト長)を得る

nchar関数を使用する。デフォルトで得られる数値は、引数に与えられた文字列の文字数のため(アルファベットも漢字も同じ一つの文字数としてカウントする)、typeオプションにbytesを指定すること。

> st <- c("R console", "あいう", "あAいBう")
> nchar(st)
[1] 9 3 5
> nchar(st, type = "bytes")
[1] 9 6 8

2014年9月 5日 (金)

[R]数値を適当な桁で丸める

round関数を使う。なお、round関数は四捨五入ではなくいわゆる五捨五入を行うので注意。例えばround関数で1.5を整数に丸めると2になるが、2.5も2になるので注意。オプションを何も付けないと、整数に丸める。

以下は小数を整数に丸める例。

> d <- c(1.4, 1.5, 1.6, 2.5, 3.5, 4.5)
> round(d)
[1] 1 2 2 2 4 4

digitsオプションを使用すると、丸める桁を指定することができる。例えば、小数点以下第2位に丸める場合(~.XXという数値にする場合)は、このオプションに2を与えて実行すればよい。当然、ここでも五捨五入となるので注意。

以下は小数を小数点以下第2位に丸める例。

> d <- c(1.234, 1.235, 1.236)
> round(d, digits = 2)
[1] 1.23 1.24 1.24

2014年9月 4日 (木)

[Fortran]3択のIF文(算術IF文)

FortranのIF文で、例えば以下のような3択のものがある。dは任意の数値型変数。

if(d) 100,200,300

これは算術IF文と呼ばれる1つの構文。変数dの値が負(d < 0.0)であればラベル100へ、dが0(d = 0)であればラベル200へ、dが正(d > 0.0)であればラベル300へジャンプせよという、条件分岐である。   

2014年9月 3日 (水)

[Fortran]DO型並び

DO型並び

double precision :: v(3)
integer i
'
v(1) = 1.1d0
v(2) = 2.2d0
v(3) = 3.3d0
'
write(*, '(3(f5.3,1x))') (v(i), i = 1, 3)
'
end

出力は以下のとおり。

1.100 2.200 3.300

2014年9月 2日 (火)

[Fortran]Fortranの廃止予定事項

9つの廃止予定事項がある。

  • 算術IF文
  • H型編集記述子

« 2014年8月 | トップページ | 2014年10月 »

無料ブログはココログ

■■

■■■