scan によるテキストデータの読み込み

以下のようなデータを読み込みたいとします.

# test.txt
	X1	X2	X3	X4
1	0.3	0.2	0.2	0.4
2	0.5	0.1	0.2	0.2
3	0.1	0.3	0.2	0.1

write.table で書きだしたときのような形式ですね.


read.table だと,list型で読み込まれてしまいますが,

> x <- read.table("test.txt", header = TRUE, row.names = 1)
> mode(x)
[1] "list"
> x
   X1  X2  X3  X4
1 0.3 0.2 0.2 0.4
2 0.5 0.1 0.2 0.2
3 0.1 0.3 0.2 0.1
> 

scan ならvector 型で読み込んでくれます.

> y <- scan("test.txt", skip = 2)
	# skip は先頭から何行とばして読み込むかを指定
Read 15 items
> mode(y)
[1] "numeric"
> y
 [1] 1.0 0.3 0.2 0.2 0.4 2.0 0.5 0.1 0.2 0.2 3.0 0.1 0.3 0.2 0.1
> 

matrix に変換するなら,以下のようにします.

> z<- matrix( scan("test.txt", skip = 2), nrow = 3, byrow = TRUE)[ , -1]
	# [ , -1] で行名を除外
Read 15 items
> mode(z)
[1] "numeric"
> z
     [,1] [,2] [,3] [,4]
[1,]  0.3  0.2  0.2  0.4
[2,]  0.5  0.1  0.2  0.2
[3,]  0.1  0.3  0.2  0.1
> 

matrix なら,そのまま image 関数などに渡せるので便利です.

        • -

参考
46. 落穂ひろい (R-Tips)
http://cse.naro.affrc.go.jp/takezawa/r-tips/r/46.html