R言語バイナリファイル
2981 ワード
バイナリファイルは、ビットとバイト(0と1)のみで格納される情報を含むファイルである.これらは、バイトが他の多くの印刷不可能な文字を含む文字と記号に変換されるため、人間が読むことができるものではありません.任意のテキストエディタを使用してバイナリファイルを読み込むと、Øやðを選択します.バイナリ・ファイルは、特定のプログラムによって読み込まなければ使用できません.たとえば、MicrosoftWordプログラムのバイナリファイルは、Wordプログラムによって人間が読むことができる形式にしか読み込めません.これは、人間が読むことができるテキストのほかに、文字やページ番号などのフォーマットなど、より多くの情報があり、アルファベット数字文字とともに格納されていることを示しています.最後のバイナリ・ファイルは、連続したバイト・シーケンスです.テキストファイルに表示される改行文字は、最初の行から次の行に接続された文字です.他のプログラムによって生成されるデータは、Rをバイナリファイルとして処理する必要がある場合がある.また,R言語は他のプログラムと共有可能なバイナリファイルを作成するために必要である.R言語には2つの関数WriteBin()とreadBin()があり、バイナリファイルを作成および読み込みます.構文
writeBin(object,con)readBin(con,what,n)以下は、使用するパラメータの説明です.conは、バイナリファイルを読み取りまたは書き込みする接続オブジェクトです.objectは書き込むバイナリファイルです.文字、整数などのパターンは、読み込むバイトを表します.nは、バイナリファイルから読み出したバイト数である.例
R言語内蔵データ「mtcars」を考える.まず、csvファイルを作成し、バイナリファイルに変換し、オペレーティングシステムファイルとして格納します.次に、作成したバイナリファイルを読み込みます.バイナリファイルの書き込み
データフレーム「mtcars」をcsvファイルとして読み出し、オペレーティングシステムにバイナリファイルとして書き込みます.
Read the "mtcars"data frame as a csv file and store only the columns
"cyl", "am"and "gear". write.table(mtcars, file = "mtcars.csv",row.names = FALSE, na = "", col.names = TRUE, sep = ",")
Store 5 records from the csv file as a new data frame.
new.mtcars
Create a connection object to write the binary file using mode "wb".
write.filename = file("/web/com/binmtcars.dat", "wb")
Write the column names of the data frame to the connection object.
writeBin(colnames(new.mtcars), write.filename)
Write the records in each of the column to the file.
writeBin(c(new.mtcars$cyl,new.mtcars$am,new.mtcars$gear), write.filename)
Close the file for writing so that it can be read by other program.
close(write.filename)バイナリファイルを読み込む
上で作成したバイナリファイルは、すべてのデータを連続バイトとして格納します.したがって、適切なカラム名の称値とカラム値を選択することで読み出します.
Create a connection object to read the file in binary mode using "rb".
read.filename
First read the column names. n = 3 as we have 3 columns.
column.names
Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename bindata
Print the data.
print(bindata)
Read the values from 4th byte to 8th byte which represents "cyl".
cyldata = bindata[4:8] print(cyldata)
Read the values form 9th byte to 13th byte which represents "am".
amdata = bindata[9:13] print(amdata)
Read the values form 9th byte to 13th byte which represents "gear".
geardata = bindata[14:18] print(geardata)
Combine all the read values to a dat frame.
finaldata=cbind(cyldata,amdata,geardata)colnames(finaldata)=column.names print(finaldata)上記のコードを実行すると、以下の結果とグラフが生成される-[17108963 17280881249 7496037 6 4[7]6 8 1 1 1 0[13]0 4 4 4 4 3
[1] 6 6 4 6 8
[1] 1 1 1 0 0
[1] 4 4 4 3 3
[1,]6 1 4[2,]6 1 4[3,]4 1 4[4,]6 0 3[5,]8 0 3ご覧のように、Rのバイナリファイルを読み込むことで元のデータを得る.
writeBin(object,con)readBin(con,what,n)以下は、使用するパラメータの説明です.conは、バイナリファイルを読み取りまたは書き込みする接続オブジェクトです.objectは書き込むバイナリファイルです.文字、整数などのパターンは、読み込むバイトを表します.nは、バイナリファイルから読み出したバイト数である.例
R言語内蔵データ「mtcars」を考える.まず、csvファイルを作成し、バイナリファイルに変換し、オペレーティングシステムファイルとして格納します.次に、作成したバイナリファイルを読み込みます.バイナリファイルの書き込み
データフレーム「mtcars」をcsvファイルとして読み出し、オペレーティングシステムにバイナリファイルとして書き込みます.
Read the "mtcars"data frame as a csv file and store only the columns
"cyl", "am"and "gear". write.table(mtcars, file = "mtcars.csv",row.names = FALSE, na = "", col.names = TRUE, sep = ",")
Store 5 records from the csv file as a new data frame.
new.mtcars
Create a connection object to write the binary file using mode "wb".
write.filename = file("/web/com/binmtcars.dat", "wb")
Write the column names of the data frame to the connection object.
writeBin(colnames(new.mtcars), write.filename)
Write the records in each of the column to the file.
writeBin(c(new.mtcars$cyl,new.mtcars$am,new.mtcars$gear), write.filename)
Close the file for writing so that it can be read by other program.
close(write.filename)バイナリファイルを読み込む
上で作成したバイナリファイルは、すべてのデータを連続バイトとして格納します.したがって、適切なカラム名の称値とカラム値を選択することで読み出します.
Create a connection object to read the file in binary mode using "rb".
read.filename
First read the column names. n = 3 as we have 3 columns.
column.names
Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename bindata
Print the data.
print(bindata)
Read the values from 4th byte to 8th byte which represents "cyl".
cyldata = bindata[4:8] print(cyldata)
Read the values form 9th byte to 13th byte which represents "am".
amdata = bindata[9:13] print(amdata)
Read the values form 9th byte to 13th byte which represents "gear".
geardata = bindata[14:18] print(geardata)
Combine all the read values to a dat frame.
finaldata=cbind(cyldata,amdata,geardata)colnames(finaldata)=column.names print(finaldata)上記のコードを実行すると、以下の結果とグラフが生成される-[17108963 17280881249 7496037 6 4[7]6 8 1 1 1 0[13]0 4 4 4 4 3
[1] 6 6 4 6 8
[1] 1 1 1 0 0
[1] 4 4 4 3 3
cyl am gear
[1,]6 1 4[2,]6 1 4[3,]4 1 4[4,]6 0 3[5,]8 0 3ご覧のように、Rのバイナリファイルを読み込むことで元のデータを得る.