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

2014年11月18日 (火)

[R]ベクトルの構成要素に含まれるNA(欠損値)を取り除く

ベクトルの構成要素からNA(欠損値)を取り除くには,is.na関数を使って判定して取り除けばよい.

Rの書籍にはベクトルの構成要素からNAだけを取り除く方法が散見されるが,実務ではそれは現実的ではない.例えば,ペアとなる値がそれぞれあり(例えば時間xとその時点での値y),片方の値がNAのときはペアのデータ自体を消したいときがある.以下はそのような例で一方の値がNAのペアを取り除く例.NAではない値のインデックスを抽出するのにwhich関数とis.na関数を併用している.

> x <- c(1, 2, 4, 7)
> y <- c(0, 4, NA, 49)
> y[! is.na(y)]  # 単純にNAを取り除いて値を表示
[1]  0  4 49
> idx <- which(! is.na(y))  # NAではない値のインデックスを抽出
> idx
[1] 1 2 4
> x[idx]
[1] 1 2 7
> y[idx]
[1]  0  4 49

2014年11月14日 (金)

[Perl]コマンドライン引数の値を得る

$ARGV変数を使う。配列であり、1つ目のコマンドライン引数のインデックスが0で以下続く。

以下をtest.plとして保存、chmodコマンドで実行権限を付与する。

#!/usr/bin/perl
for ($i = 0; $i < ($#ARGV + 1); $i++) {
    printf "%s\n", $ARGV[$i];
}

実行例。

$ ./test.pl
$ ./test.pl A
A
$ ./test.pl A 1
A
1
$ ./test.pl A 1 "2 3"
A
1
2 3

2014年11月13日 (木)

[Perl]コマンドライン引数の個数を得る

$#ARGV変数を使えばよい。ただし、$#ARGVには「コマンドライン引数の個数 - 1」値が入っていることから、個数として判定する場合には1を足した値と評価を必要がある。以下、動作例。

以下をスクリプトをtest.plとして保存する。

#!/usr/bin/perl
printf "\$#ARGVの値               %d\n", $#ARGV;
printf "コマンドライン引数の個数 %d\n", $#ARGV + 1;

実行してみる。

$ ./test.pl
$#ARGVの値               -1
コマンドライン引数の個数 0
$ ./test.pl a
$#ARGVの値               0
コマンドライン引数の個数 1
$ ./test.pl a b c 1
$#ARGVの値               3
コマンドライン引数の個数 4

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

無料ブログはココログ

■■

■■■