R - Pliki binarne

Plik binarny to plik, który zawiera informacje przechowywane wyłącznie w postaci bitów i bajtów (0 i 1). Nie są czytelne dla człowieka, ponieważ zawarte w nich bajty przekładają się na znaki i symbole, które zawierają wiele innych niedrukowalnych znaków. Próba odczytania pliku binarnego za pomocą dowolnego edytora tekstu spowoduje wyświetlenie znaków takich jak Ø i ð.

Aby plik binarny był użyteczny, musi być odczytywany przez określone programy. Na przykład plik binarny programu Microsoft Word może zostać odczytany do postaci czytelnej dla człowieka tylko przez program Word. Co oznacza, że ​​oprócz tekstu czytelnego dla człowieka jest o wiele więcej informacji, takich jak formatowanie znaków, numerów stron itp., Które są również przechowywane wraz ze znakami alfanumerycznymi. I wreszcie plik binarny to ciągła sekwencja bajtów. Podział wiersza, który widzimy w pliku tekstowym, to znak łączący pierwszą linię z następną.

Czasami dane generowane przez inne programy muszą zostać przetworzone przez R jako plik binarny. R jest również wymagany do tworzenia plików binarnych, które można udostępniać innym programom.

R ma dwie funkcje WriteBin() i readBin() do tworzenia i odczytywania plików binarnych.

Składnia

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

Poniżej znajduje się opis użytych parametrów -

  • con to obiekt połączenia służący do odczytu lub zapisu pliku binarnego.

  • object jest plikiem binarnym, który ma zostać zapisany.

  • what to tryb, taki jak znak, liczba całkowita itp. reprezentujący bajty do odczytania.

  • n to liczba bajtów do odczytania z pliku binarnego.

Przykład

Rozważamy wbudowane w R. dane „mtcars”. Najpierw tworzymy z niego plik csv i konwertujemy go na plik binarny i przechowujemy jako plik systemu operacyjnego. Następnie czytamy ten plik binarny utworzony w R.

Pisanie pliku binarnego

Odczytujemy ramkę danych „mtcars” jako plik csv, a następnie zapisujemy ją jako plik binarny w systemie operacyjnym.

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

Czytanie pliku binarnego

Utworzony powyżej plik binarny przechowuje wszystkie dane jako ciągłe bajty. Przeczytamy go więc, wybierając odpowiednie wartości nazw kolumn, a także wartości kolumn.

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

Kiedy wykonujemy powyższy kod, daje on następujący wynik i wykres -

[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

Jak widać, odzyskaliśmy oryginalne dane, czytając plik binarny w R.