R - İkili Dosyalar

İkili dosya, yalnızca bit ve bayt biçiminde depolanan bilgileri içeren bir dosyadır. (0'lar ve 1'ler). İçerisindeki baytlar, yazdırılamayan diğer birçok karakter içeren karakterlere ve sembollere çevrildiğinden, bunlar insan tarafından okunamaz. Herhangi bir metin düzenleyici kullanarak ikili dosya okumaya çalışmak Ø ve ð gibi karakterleri gösterecektir.

İkili dosyanın kullanılabilir olması için belirli programlar tarafından okunması gerekir. Örneğin, bir Microsoft Word programının ikili dosyası, yalnızca Word programı tarafından okunabilir bir biçime okunabilir. Bu, insan tarafından okunabilir metnin yanı sıra, alfasayısal karakterlerle birlikte saklanan karakterlerin biçimlendirilmesi ve sayfa numaraları gibi çok daha fazla bilgi olduğunu gösterir. Ve son olarak bir ikili dosya sürekli bir bayt dizisidir. Bir metin dosyasında gördüğümüz satır sonu, ilk satırı bir sonrakine katan bir karakterdir.

Bazen, diğer programlar tarafından üretilen verilerin bir ikili dosya olarak R tarafından işlenmesi gerekir. Ayrıca diğer programlarla paylaşılabilen ikili dosyalar oluşturmak için R gereklidir.

R'nin iki işlevi vardır WriteBin() ve readBin() ikili dosyalar oluşturmak ve okumak için.

Sözdizimi

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

Aşağıda kullanılan parametrelerin açıklaması verilmiştir -

  • con ikili dosyayı okumak veya yazmak için bağlantı nesnesidir.

  • object yazılacak ikili dosyadır.

  • what okunacak baytları temsil eden karakter, tamsayı vb. gibi moddur.

  • n ikili dosyadan okunacak bayt sayısıdır.

Misal

R dahili verilerini "mtcars" olarak kabul ediyoruz. Önce ondan bir csv dosyası oluşturup bunu ikili bir dosyaya dönüştürüp bir işletim sistemi dosyası olarak saklıyoruz. Daha sonra, R'de oluşturulan bu ikili dosyayı okuyoruz.

İkili Dosyayı Yazmak

"Mtcars" veri çerçevesini bir csv dosyası olarak okuyoruz ve ardından işletim sistemine ikili dosya olarak yazıyoruz.

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

İkili Dosyayı Okumak

Yukarıda oluşturulan ikili dosya, tüm verileri sürekli baytlar olarak depolar. Bu nedenle, sütun adlarının yanı sıra sütun değerlerinin de uygun değerlerini seçerek okuyacağız.

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

Yukarıdaki kodu çalıştırdığımızda, aşağıdaki sonucu ve grafiği üretir -

[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

Gördüğümüz gibi, orijinal veriyi R'deki ikili dosyayı okuyarak geri aldık.