آموزش فایل های باینری در زبان برنامه نویسی آر
یک فایل باینری، فایلی است که فقط شامل اطلاعاتی می شود که به فرم بیت ها و بایت ها ذخیره شده اند (۰ و ۱) . آنها توسط انسانها قابل خواندن نیستند؛ زیرا بایت های موجود در آن به کاراکترها و نمادهایی ترجمه می شوند که شامل بسیاری از کاراکترهای غیر قابل چاپ دیگر می باشند. تلاش برای خواندن یک فایل باینری با استفاده از هر نوع ویرایشگر متنی؛ نشان دهنده کاراکترهایی مانند Ø و ð خواهد بود.
فایل باینری را باید با برنامه های خاصی خواند تا قابل استفاده باشند. برای مثال، فایل باینری برنامه مایکروسافت ورد را می تواند فقط با استفاده از برنامه ی ورد؛ برای انسان قابل خواندن کرد. این برنامه علاوه بر نشان دادن متن قابل خواندن برای انسان؛ اطلاعات بسیار دیگری از جمله فرمت کردن کاراکترها و شماره صفحات و … را نیز شامل می شود که آنها نیز همراه با کاراکترهای الفبایی ذخیره می شوند و در نهایت یک فایل باینری توالی مداومی از بایت ها است. این بریک لاین که در یک فایل متنی مشاهده می کنیم؛ کاراکتری است که به اولین خط بعدی متصل می شود.
گاهی اوقات داده های ایجاد شده توسط دیگر برنامه ها باید توسط آر به شکل یک فایل باینری پردازش شود. همچنین آر نیز باید یک فایل باینری ایجاد کند که بتوان آن را با دیگر برنامه ها به اشتراک گذاشت.
در زبان برنامه نویسی R دو تابع برای ایجاد و خواندن فایل های باینری وجود دارد که به ترتیب ()writeBin و ()readBin هستند.
سینتکس
writeBin(object, con)
readBin(con, what, n )
پارامترهایی که در کد بالا استفاده شده اند؛ عبارتند از:
- con شیء اتصال برای خواندن و نوشتن فایل باینری می باشد.
- object فایل باینری است که باید نوشته شود.
- what حالتی مانند کاراکتر، عدد صحیح و غیره می باشد. نشان دهنده بایت هایی است که باید خوانده شود.
- n تعداد بایت هایی است که باید از روی فایل باینری باید خواند.
مثال
ما ابتدا “mtcars” را که داده ی داخلی آر می باشد را در نظر می گیریم. ابتدا می توانیم یک فایل csv را از روی آن ایجاد کنیم و آن را به یک فایل باینری تبدیل نماییم و آن را به صورت یک فایل OS ذخیره کنیم. سپس این فایل باینری ایجاد شده در آر را می خوانیم.
نوشتن فایل باینری
ما فریم دیتای “mtcars” را به عنوان یک فایل csv می خوانیم و سپس آن را به عنوان یک فایل باینری برای سیستم عامل می نویسیم.
# 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)
زمانی که کد بالا را اجرا می کنیم؛ نتایج و نمودار زیر اجرا می شود:
[۱] ۷۱۰۸۹۶۳ ۱۷۲۸۰۸۱۲۴۹ ۷۴۹۶۰۳۷ ۶ ۶ ۴
[۷] ۶ ۸ ۱ ۱ ۱ ۰
[۱۳] ۰ ۴ ۴ ۴ ۳ ۳
[۱] ۶ ۶ ۴ ۶ ۸
[۱] ۱ ۱ ۱ ۰ ۰
[۱] ۴ ۴ ۴ ۳ ۳
cyl am gear
[۱,] ۶ ۱ ۴
[۲,] ۶ ۱ ۴
[۳,] ۴ ۱ ۴
[۴,] ۶ ۰ ۳
[۵,] ۸ ۰ ۳
همان طور که مشاهده می کنید؛ داده های اصلی را با خواندن فایل باینری در آر؛ بازگردانده ایم.