R - ไฟล์ไบนารี

ไฟล์ไบนารีคือไฟล์ที่มีข้อมูลที่จัดเก็บในรูปแบบของบิตและไบต์เท่านั้น (0 และ 1) พวกเขาไม่สามารถอ่านได้โดยมนุษย์เนื่องจากไบต์ในนั้นแปลเป็นอักขระและสัญลักษณ์ซึ่งมีอักขระที่ไม่สามารถพิมพ์ได้อื่น ๆ อีกมากมาย การพยายามอ่านไฟล์ไบนารีโดยใช้โปรแกรมแก้ไขข้อความใด ๆ จะแสดงอักขระเช่นØและð

ไฟล์ไบนารีจะต้องถูกอ่านโดยโปรแกรมเฉพาะจึงจะใช้งานได้ ตัวอย่างเช่นไฟล์ไบนารีของโปรแกรม Microsoft Word สามารถอ่านเป็นรูปแบบที่มนุษย์อ่านได้โดยโปรแกรม Word เท่านั้น ซึ่งบ่งชี้ว่านอกจากข้อความที่มนุษย์อ่านได้แล้วยังมีข้อมูลอื่น ๆ อีกมากมายเช่นการจัดรูปแบบตัวอักษรและหมายเลขหน้าเป็นต้นซึ่งจะจัดเก็บไว้พร้อมกับอักขระที่เป็นตัวเลขและตัวอักษร และสุดท้ายไฟล์ไบนารีคือลำดับไบต์ที่ต่อเนื่องกัน ตัวแบ่งบรรทัดที่เราเห็นในไฟล์ข้อความคืออักขระที่เชื่อมบรรทัดแรกไปยังบรรทัดถัดไป

บางครั้งข้อมูลที่สร้างโดยโปรแกรมอื่นจำเป็นต้องประมวลผลโดย R เป็นไฟล์ไบนารี นอกจากนี้ R ยังจำเป็นในการสร้างไฟล์ไบนารีซึ่งสามารถแชร์กับโปรแกรมอื่นได้

R มีสองฟังก์ชัน WriteBin() และ readBin() เพื่อสร้างและอ่านไฟล์ไบนารี

ไวยากรณ์

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

ต่อไปนี้เป็นคำอธิบายของพารามิเตอร์ที่ใช้ -

  • con เป็นวัตถุเชื่อมต่อเพื่ออ่านหรือเขียนไฟล์ไบนารี

  • object คือไฟล์ไบนารีที่จะเขียน

  • what เป็นโหมดเช่นอักขระจำนวนเต็ม ฯลฯ แทนไบต์ที่จะอ่าน

  • n คือจำนวนไบต์ที่จะอ่านจากไฟล์ไบนารี

ตัวอย่าง

เราพิจารณาข้อมูล R inbuilt "mtcars" ก่อนอื่นเราสร้างไฟล์ csv จากไฟล์และแปลงเป็นไฟล์ไบนารีและจัดเก็บเป็นไฟล์ OS ต่อไปเราจะอ่านไฟล์ไบนารีที่สร้างขึ้นใน R

การเขียนไฟล์ไบนารี

เราอ่าน data frame "mtcars" เป็นไฟล์ csv จากนั้นจึงเขียนเป็นไฟล์ไบนารีไปยัง OS

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

การอ่านไฟล์ไบนารี

ไฟล์ไบนารีที่สร้างขึ้นด้านบนจะเก็บข้อมูลทั้งหมดเป็นไบต์ต่อเนื่อง ดังนั้นเราจะอ่านโดยเลือกค่าที่เหมาะสมของชื่อคอลัมน์และค่าคอลัมน์

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

เมื่อเรารันโค้ดด้านบนจะสร้างผลลัพธ์และแผนภูมิต่อไปนี้ -

[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