R - Tệp nhị phân

Tệp nhị phân là tệp chứa thông tin chỉ được lưu trữ dưới dạng bit và byte. (0 và 1). Chúng không thể đọc được bởi con người vì các byte trong đó chuyển thành các ký tự và ký hiệu chứa nhiều ký tự không thể in khác. Cố gắng đọc tệp nhị phân bằng bất kỳ trình soạn thảo văn bản nào sẽ hiển thị các ký tự như Ø và ð.

Tệp nhị phân phải được đọc bởi các chương trình cụ thể để có thể sử dụng được. Ví dụ: tệp nhị phân của chương trình Microsoft Word chỉ có thể đọc được ở dạng con người có thể đọc được bằng chương trình Word. Điều đó chỉ ra rằng, bên cạnh văn bản có thể đọc được của con người, có rất nhiều thông tin khác như định dạng các ký tự và số trang, v.v., cũng được lưu trữ cùng với các ký tự chữ và số. Và cuối cùng một tệp nhị phân là một chuỗi byte liên tục. Dấu ngắt dòng chúng ta thấy trong tệp văn bản là một ký tự nối dòng đầu tiên với dòng tiếp theo.

Đôi khi, dữ liệu do các chương trình khác tạo ra được yêu cầu R xử lý dưới dạng tệp nhị phân. Ngoài ra R được yêu cầu để tạo các tệp nhị phân có thể được chia sẻ với các chương trình khác.

R có hai chức năng WriteBin()readBin() để tạo và đọc các tệp nhị phân.

Cú pháp

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

Sau đây là mô tả về các tham số được sử dụng:

  • con là đối tượng kết nối để đọc hoặc ghi tệp nhị phân.

  • object là tệp nhị phân được ghi.

  • what là chế độ như ký tự, số nguyên, v.v. đại diện cho các byte được đọc.

  • n là số byte để đọc từ tệp nhị phân.

Thí dụ

Chúng tôi coi dữ liệu sẵn có R là "mtcars". Đầu tiên, chúng tôi tạo một tệp csv từ nó và chuyển đổi nó thành tệp nhị phân và lưu trữ dưới dạng tệp hệ điều hành. Tiếp theo chúng ta đọc tệp nhị phân này được tạo thành R.

Viết tệp nhị phân

Chúng tôi đọc khung dữ liệu "mtcars" dưới dạng tệp csv và sau đó ghi nó dưới dạng tệp nhị phân vào hệ điều hành.

# 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 <- read.table("mtcars.csv",sep = ",",header = TRUE,nrows = 5)

# 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)

Đọc tệp nhị phân

Tệp nhị phân được tạo ở trên lưu trữ tất cả dữ liệu dưới dạng các byte liên tục. Vì vậy, chúng ta sẽ đọc nó bằng cách chọn các giá trị thích hợp của tên cột cũng như giá trị của cột.

# Create a connection object to read the file in binary mode using "rb".
read.filename <- file("/web/com/binmtcars.dat", "rb")

# First read the column names. n = 3 as we have 3 columns.
column.names <- readBin(read.filename, character(),  n = 3)

# Next read the column values. n = 18 as we have 3 column names and 15 values.
read.filename <- file("/web/com/binmtcars.dat", "rb")
bindata <- readBin(read.filename, integer(),  n = 18)

# 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)

Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả và biểu đồ sau:

[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

Như chúng ta thấy, chúng ta đã lấy lại dữ liệu ban đầu bằng cách đọc tệp nhị phân trong R.