R - File binari

Un file binario è un file che contiene informazioni memorizzate solo sotto forma di bit e byte (0 e 1). Non sono leggibili dall'uomo poiché i byte in esso contenuti si traducono in caratteri e simboli che contengono molti altri caratteri non stampabili. Il tentativo di leggere un file binario utilizzando un qualsiasi editor di testo mostrerà caratteri come Ø e ð.

Il file binario deve essere letto da programmi specifici per essere utilizzabile. Ad esempio, il file binario di un programma Microsoft Word può essere letto in un formato leggibile solo dal programma Word. Il che indica che, oltre al testo leggibile dall'uomo, ci sono molte più informazioni come la formattazione dei caratteri e dei numeri di pagina, ecc., Che sono anche memorizzati insieme ai caratteri alfanumerici. E infine un file binario è una sequenza continua di byte. L'interruzione di riga che vediamo in un file di testo è un carattere che unisce la prima riga alla successiva.

A volte, i dati generati da altri programmi devono essere elaborati da R come file binario. Anche R è necessario per creare file binari che possono essere condivisi con altri programmi.

R ha due funzioni WriteBin() e readBin() per creare e leggere file binari.

Sintassi

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

Di seguito la descrizione dei parametri utilizzati:

  • con è l'oggetto di connessione per leggere o scrivere il file binario.

  • object è il file binario che deve essere scritto.

  • what è la modalità come carattere, numero intero ecc. che rappresenta i byte da leggere.

  • n è il numero di byte da leggere dal file binario.

Esempio

Consideriamo i dati R incorporati "mtcars". Per prima cosa creiamo un file csv da esso e lo convertiamo in un file binario e lo memorizziamo come file del sistema operativo. Successivamente leggiamo questo file binario creato in R.

Scrittura del file binario

Leggiamo il data frame "mtcars" come file csv e poi lo scriviamo come file binario nel sistema operativo.

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

Leggere il file binario

Il file binario creato sopra memorizza tutti i dati come byte continui. Quindi lo leggeremo scegliendo i valori appropriati dei nomi delle colonne e dei valori delle colonne.

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

Quando eseguiamo il codice sopra, produce il seguente risultato e grafico:

[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

Come possiamo vedere, abbiamo recuperato i dati originali leggendo il file binario in R.