টাইপ কাস্টিং
জোর পূর্বক অন্যের জমি দখল করা এ আর নতুন কি। মমতাজ আফারে ব্যাংক থেকে এসএমএস দিলো তারা আর এখন থেকে ৫০ পয়সা উপহার দিবে না। তো মমতাজ আফার মন ভীষণ খারাপ। ব্যাংক তাহলে তার যেই সুদের টাকার পরিমাণটা ৫০০.৫০ ছিলো যা ডাবল টাইপের ডাটা টাইপ এইটাকে কিভাবে ৫০০ তে আনবে। প্রোগ্রামিং এর ভাষায় যাকে বলে টাইপ কাস্টিং। দেখা যাক কিভাবে টাইপ কাস্টিং করা যায়।
> Momotaz <- 500.50
> typeof(Momotaz)
[1] "double"
> Sad <- as.integer(Momotaz)
> print(Sad)
[1] 500
> typeof(Sad)
[1] "integer"
বাহ কত সুন্দর করে ফেললাম। এখন প্রশ্ন আসতে পারে ডাবল থেকে তো ইন্টিজারে কনভার্ট করা শিখে গেলাম। কিন্তু ইন্টিজার থেকে ডাবলে কিভাবে করবো। আমরা আগেই জেনেছি। নিউমেরিক ভ্যালু আমাদের এসাইন করলে সেটা দশমিক সংখ্যা বা পূর্ন্যসংখ্যা যাই এসাইন করি না কেন। সবই ডাবল হিসাবে বাই ডিফল্ট নিয়ে নেয়। তাই আমাদের ইন্টিজার থেকে ডাবলে কনভার্ট করার প্রয়োজন পরে না। তবে অনেক সময় যেমন মমতাজ আফাকে আবার ব্যাংক বললো আপনাকে আবার আমরা ৫০ পয়সা করে উপহার দিবো। সেক্ষেত্রে একবার তো ডাবল থেকে ইন্টিজার করে ফেললাম। এখন আবার ইন্টিজার থেকে ডাবলে কনভার্ট করতে হবে।
> Sad <- as.double(Momotaz)
> print(Sad)
[1] 500.5
> typeof(Sad)
[1] "double"
বাহ কত সুন্দর ভাবে হয়ে গেলো। একটু কাহিনী অবশ্য করা লাগলো এর কারন আপনি ইন্টিজার থেকে ডাবলে কাস্টিং করলে দশমিকের পরের মান পাবেন না। এইজন্যে আপনাকে আগে একটা দশমিক সংখ্যা টাইপের ভ্যারিয়েবল এসাইন করে টাইপ কাস্টিং করতে হবে। এইজন্যেই আমরা মমতাজ আফার আগের এসাইন করা Momotaz <- 500.50 কে স্যাড লাইফে ঢুকিয়ে রুবেল লাইফ করে ফেলছি।
> a <- 500.00
> b <- as.integer(a)
> print(b)
[1] 500
> c <- as.double(b)
> print(c)
[1] 500
> typeof(c)
[1] "double"
c ভ্যারিয়েবলের টাইপ কিন্তু ঠিক দেখাচ্ছে। কিন্তু দশমিক দিয়ে কোণ সংখ্যাই আসলো না। কিন্তু.00 তো আসার কথা তাও এলো না। আর প্রোগ্রামিং .00 লিখার চাইতে একেবারে ফাঁকা রাখে এটাই তাদের কাছে ভালো মনে হয়। আগে আমরা একটা ব্যাপার খেয়াল করছিলাম L বা as.integer() দিয়ে এসাইন করার ব্যাপারটা। ওখানে বলেছিলাম যে যেভাবে খায় আর কি। এই টাইপ কাস্টিং এর বেলায় দুইভাবে খেতে পারবেন না। এক ভাবে খেয়েই সন্তুষ্ট থাকতে হবে তাও আবার ফিক্সড করা as.integer() দিয়ে। ভ্যারিয়েবল এসাইন করার সময় আপনি দুই পদ্ধতির যেকোন এক পদ্ধতি অনুসরণ করলেই হবে। কিন্তু কাস্টিং এর বেলায় হবে না। এই ব্যাপারটা আমলে রাখতে হবে।
> b <- 500.50
> a <- bL
Error: object 'bL' not found
অনেক সময় আমাদের ইন্টিজার বা ডাবলকে টাইপ কাস্ট করে ক্যারেক্টারে রাখতে হবে। হতেই পারে না তাই না! শিখে রাখা ভালো, কিভাবে করবো দেখা যাক।
> a <- 500L
> typeof(a)
[1] "integer"
> b <- as.character(a)
> typeof(b)
[1] "character"
> print(b)
[1] "500"
> c <- 3.1456
> typeof(c)
[1] "double"
> d <- as.character(c)
> typeof(d)
[1] "character"
> print(d)
[1] "3.1456"
এছাড়াও complex, vectors, matrices, array, data frame, list, factor ইত্যাদি ডাটা টাইপ আছে যাদের নিয়ে অদূর ভবিষ্যৎ জানা যাবে।