R - 二进制文件

二进制文件是一个文件,其中包含仅以位和字节形式存储的信息(0和1).它们不是人类可读的,因为它中的字节转换为包含许多其他不可打印字符的字符和符号.尝试使用任何文本编辑器读取二进制文件将显示像&Oslash这样的字符;和ð.

特定程序必须读取二进制文件才能使用.例如,Microsoft Word程序的二进制文件只能由Word程序读取为人类可读的形式.这表明除了人类可读的文本之外,还有更多的信息,如字符和页码等的格式化,它们也与字母数字字符一起存储.最后,二进制文件是一个连续的字节序列.我们在文本文件中看到的换行符是将第一行连接到下一行的字符.

有时,其他程序生成的数据需要由R作为二进制文件处理.还需要R来创建可以与其他程序共享的二进制文件.

R有两个函数 WriteBin() readBin()创建和读取二进制文件.

语法

 
 writeBin(object,con)
 readBin(con,what,n)

以下是所用参数的描述 :

  • con 是读取或写入二进制文件的连接对象.

  • 对象是要写的二进制文件.

  • 什么是类似于字符的模式表示要读取的字节的整数等.

  • n 是从二进制文件中读取的字节数.

示例

我们认为R内置数据"mtcars".首先,我们从中创建一个csv文件,并将其转换为二进制文件并将其存储为OS文件.接下来我们读取创建到R中的这个二进制文件.

编写二进制文件

我们将数据框"mtcars"读作csv文件然后将其作为二进制文件写入操作系统.

 
#将"mtcars"数据框读取为csv文件并仅存储列
"cyl","am"和"gear". 
 write.table(mtcars,file ="mtcars.csv",row.names = FALSE,na ="",
 col.names = TRUE,sep =",")
#将csv文件中的5条记录存储为新数据帧. 
 new.mtcars< -  read.table("mtcars.csv",sep =",",header = TRUE,nrows = 5)
#创建一个连接对象来编写二进制文件使用模式"wb". 
 write.filename = file("/web/com/binmtcars.dat","wb")
#将数据框的列名写入连接对象. 
 writeBin(colnames(new.mtcars),write.filename)
#将每列中的记录写入文件. 
 writeBin(c(new.mtcars $ cyl,new.mtcars $ am,new.mtcars $ gear),write.filename)
#关闭文件以便写入以便它可以由其他程序阅读. 
 close(write.filename)

读取二进制文件

上面创建的二进制文件存储所有数据为连续字节.因此,我们将通过选择适当的列名值和列值来读取它.

 
#创建一个连接对象来读取文件二进制模式使用"rb". 
 read.filename<  -  file("/web/com/binmtcars.dat","rb")
#首先读取列名. n = 3,因为我们有3列. 
 column.names<  -  readBin(read.filename,character(),n = 3)
#下一步读取列值. n = 18,因为我们有3个列名和15个值. 
 read.filename<  -  file("/web/com/binmtcars.dat","rb")
 bindata<  -  readBin(read.filename,integer(),n = 18)
#打印数据. 
 print(bindata)
#读取第4个字节到第8个字节的值,表示"cyl". 
 cyldata = bindata [4:8] 
 print(cyldata)
#读取第9个字节到第13个字节的值,表示"am". 
 amdata = bindata [9:13] 
 print(amdata)
#读取第9个字节到第13个字节的值,表示"gear". 
 geardata = bindata [14:18] 
 print(geardata)
#将所有读取值合并到dat帧. 
 finaldata = cbind(cyldata,amdata,geardata)
 colnames(finaldata)= column.names 
 print(finaldata)

当我们执行上面的代码时,它产生以下结果和图表 :

[1]    7108963 1728081249    7496037          6          6          4
 [7]          6          8          1          1          1          0
[13]          0          4          4          4          3          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中的二进制文件来获取原始数据.