আর-তে পূর্ণসংখ্যার শ্রেণি এবং সংখ্যাসূচক শ্রেণীর মধ্যে পার্থক্য কী


96

আমি এক পরম প্রোগ্রামিং শিক্ষানবিস বলে এই প্রবন্ধটি বলতে চাই, সুতরাং অনুগ্রহ করে এই প্রশ্নটি কতটা মৌলিক।

আমি আর এ "পারমাণবিক" ক্লাস সম্পর্কে আরও ভাল বোঝার চেষ্টা করছি এবং সম্ভবত এটি প্রোগ্রামিংয়ের ক্লাসগুলির জন্য সাধারণভাবে যায়। আমি একটি অক্ষর, যৌক্তিক এবং জটিল ডেটা ক্লাসের মধ্যে পার্থক্য বুঝতে পারি তবে আমি একটি সংখ্যাসূচক শ্রেণি এবং একটি পূর্ণসংখ্যা শ্রেণীর মধ্যে মৌলিক পার্থক্য খুঁজে পেতে লড়াই করছি।

ধরা যাক যে আমার কাছে একটি x <- c(4, 5, 6, 6)পূর্ণসংখ্যার ভেক্টর রয়েছে, এটি পূর্ণসংখ্যার শ্রেণি হওয়ার জন্য এটি বোধগম্য হবে। কিন্তু যখন আমি কি class(x)আমি পেতে [1] "numeric"। তারপরে যদি আমি এই ভেক্টরটিকে একটি পূর্ণসংখ্যার শ্রেণিতে রূপান্তর করি x <- as.integer(x)। এটি ক্লাসটি ভিন্ন ভিন্ন সংখ্যার একই সঠিক তালিকা প্রদান করে।

আমার প্রশ্নটি এটি কেন এবং কেন পূর্ণসংখ্যার সেটগুলির জন্য ডিফল্ট শ্রেণি একটি সংখ্যাসূচক শ্রেণি, এবং পূর্ণসংখ্যার পরিবর্তে সংখ্যার হিসাবে একটি পূর্ণসংখ্যা সেট করার সুবিধা এবং অসুবিধাগুলি কী।


4
না as.integer(c(4.1, 5.2, 6.3, 6.4))আপনি পার্থক্য বুঝতে সাহায্য করেছিল? আপনার বুঝতে হবে যে অভ্যন্তরীণ উপস্থাপনা এবং যা মুদ্রিত হয় একেবারেই এক নয়। যাইহোক, কম্পিউটার ভাষায় ডেটা ধরণের সম্পর্কে কিছু পড়ুন।
রোল্যান্ড

ডানদিকে "সম্পর্কিত" কলামে এই প্রশ্নটি রয়েছে: স্ট্যাকওভারফ্লো
ম্যাথু লুন্ডবার্গ

4
x <- 1; is.integer(x); is.numeric(x)তাহলে চেষ্টা করুন x <- 1L; is.integer(x); is.numeric(x)এবং আপনি কিছুটা পার্থক্য দেখতে সক্ষম হতে পারেন। সি কনস্ট্রাক্টস এবং আর স্ট্রাকচারগুলিতে ভেরিয়েবল পাস করার জন্য পূর্ণসংখ্যার ক্লাসগুলি বেশি ব্যবহৃত হয়। যদিও এর থেকে আরও অনেক কিছু আছে।
ধনী স্ক্রিভেন

@ রোল্যান্ড আমি ক্লাস সম্পর্কে নির্ভুলতা নির্দিষ্ট করে নিয়ে চিন্তা করি নি। পূর্ণসংখ্যা ক্লাসগুলি পরিচালনা করার জন্য আমি ভাসমান পদ্ধতিগুলি ব্যবহার করতে অভ্যস্ত। এটা বোঝা যায়।
কেওন

উত্তর:


87

একাধিক ক্লাস রয়েছে যেগুলি "সংখ্যাসূচক" শ্রেণি হিসাবে একত্রে শ্রেণিবদ্ধ করা হয়েছে, 2 টি মধ্যে সর্বাধিক সাধারণ ডাবল (ডাবল নির্ভুলতা ভাসমান পয়েন্ট সংখ্যাগুলির জন্য) এবং পূর্ণসংখ্যা হয়। আর যখন প্রয়োজন হবে তখন স্বয়ংক্রিয়ভাবে সংখ্যাসূচক শ্রেণীর মধ্যে রূপান্তরিত হবে, তাই বেশিরভাগ অংশের ক্ষেত্রে নৈমিত্তিক ব্যবহারকারীর পক্ষে 3 সংখ্যাটি বর্তমানে পূর্ণসংখ্যা হিসাবে বা দ্বিগুণ হিসাবে সঞ্চিত কিনা তা বিবেচ্য নয়। বেশিরভাগ গণিত দ্বিগুণ নির্ভুলতা ব্যবহার করে করা হয়, তাই এটি প্রায়শই ডিফল্ট স্টোরেজ থাকে।

কখনও কখনও আপনি বিশেষত কোনও ভেক্টরটিকে পূর্ণসংখ্যারূপে সংরক্ষণ করতে চাইতে পারেন যদি আপনি জানেন যে এগুলি কখনই দ্বিগুণে রূপান্তরিত হবে না (আইডি মান বা সূচক হিসাবে ব্যবহৃত হয়) যেহেতু পূর্ণসংখ্যার জন্য কম সঞ্চয় স্থানের প্রয়োজন হয়। তবে যদি তারা এমন কোনও গণিতে ব্যবহৃত হয় যা এগুলিকে দ্বিগুণ রূপান্তরিত করে, তবে সম্ভবত এগুলি কেবল ডাবল হিসাবে শুরু করে রাখা খুব দ্রুত হবে begin


47

প্রথমত, কয়েক বছর ধরে আর সাফল্যের সাথে ব্যবহার করা পুরোপুরি সম্ভব এবং এই প্রশ্নের উত্তর জানতে হবে না। আর ব্যাকগ্রাউন্ডে আপনার জন্য (স্বাভাবিক) সংখ্যা এবং পূর্ণসংখ্যার মধ্যে পার্থক্য পরিচালনা করে।

> is.numeric(1)

[1] TRUE

> is.integer(1)

[1] FALSE

> is.numeric(1L)

[1] TRUE

> is.integer(1L)

[1] TRUE

(একটি পূর্ণসংখ্যার পরে মূলধন 'এল' লাগানো এটিকে পূর্ণসংখ্যা হিসাবে সংরক্ষণ করতে বাধ্য করে))

আপনি দেখতে পাচ্ছেন "পূর্ণসংখ্যা" হ'ল "সংখ্যার" একটি উপসেট।

> .Machine$integer.max

[1] 2147483647

> .Machine$double.xmax

[1] 1.797693e+308

পূর্ণসংখ্যাগুলি কেবলমাত্র 2 বিলিয়নেরও বেশি যান, অন্য সংখ্যাগুলি আরও বড় হতে পারে। এগুলি আরও বড় হতে পারে কারণ তারা ডাবল নির্ভুলতা ভাসমান পয়েন্ট সংখ্যা হিসাবে সঞ্চয় করা হয়। এর অর্থ হ'ল সংখ্যাটি দুটি টুকরোতে সংরক্ষণ করা হয়েছে: এক্সপোনেন্ট (উপরে 308 এর মতো, বেস 10 এর চেয়ে বেস 2 বাদে) এবং "হিস্ট্যান্ট" (উপরে 1.797693 এর মত)।

মনে রাখবেন যে 'is.integer' আপনার পুরো নম্বর রয়েছে কিনা তা পরীক্ষা নয়, তবে ডেটা কীভাবে সংরক্ষণ করা হয় তার একটি পরীক্ষা।

একটি বিষয় লক্ষ্য রাখতে হবে হ'ল কোলন অপারেটর, :যদি শুরু এবং শেষের পয়েন্টগুলি পুরো সংখ্যা হয় তবে পূর্ণসংখ্যায় ফিরে আসবে। উদাহরণস্বরূপ, 1 থেকে 5 পর্যন্ত সংখ্যার ভেক্টর 1:5তৈরি করে integerআপনার চিঠিটি যুক্ত করার দরকার নেই L

> class(1:5)
[1] "integer"

তথ্যসূত্র: https://www.quora.com/What-is-the-differences-between-numeric-and-integer-in-R


11
ঠিক কোওড়া পোস্ট থেকে নেওয়া হয়েছে? আপনি স্রেফ রেফারেন্স উল্লেখ করতে পারতেন!
শ্রুজান বড়াই


4

সহায়তা পৃষ্ঠাটি উদ্ধৃত করতে (চেষ্টা করুন ?integer), সাহসী অংশ আমার:

পূর্ণসংখ্যার ভেক্টর উপস্থিত রয়েছে যাতে ডেটা সি বা ফোর্টরান কোডে প্রেরণ করা যায় যা তাদের প্রত্যাশা করে, এবং যাতে (ছোট) পূর্ণসংখ্যার ডেটা সঠিক এবং সংক্ষিপ্তভাবে উপস্থাপন করা যায়

নোট করুন যে আর এর বাস্তবায়নগুলি পূর্ণসংখ্যক ভেক্টরগুলির জন্য 32-বিট ইন্টিজার ব্যবহার করে, সুতরাং উপস্থাপনযোগ্য পূর্ণসংখ্যার পরিসীমা প্রায় +/- 2 * 10 ^ 9 এর মধ্যে সীমাবদ্ধ: ডাবলগুলি আরও অনেক বড় পূর্ণসংখ্যাকে ঠিক ধরে রাখতে পারে।

সহায়তার পৃষ্ঠাটি পছন্দ করে বলেছে, আর integer মতামত গুলি 32-বিট সংখ্যাতে স্বাক্ষরিত তাই 212177483648 এবং +2147483647 এর মধ্যে রাখতে পারে এবং 4 বাইট নিতে পারে।

আর আই আইইই 754 স্ট্যান্ডার্ড অনুসারে numeric64-বিটের doubleসাথে সমান । আর এর কোনও একক যথার্থ ডেটা টাইপ নেই। (উত্স: numericএবং পৃষ্ঠাগুলির সহায়তা পৃষ্ঠা double)। একটি ডাবল নির্ভুলতা না হারিয়ে ঠিক -2 ^ 53 এবং 2 ^ 53 এর মধ্যে সমস্ত পূর্ণসংখ্যা সঞ্চয় করতে পারে।

আমরা কোনও ভেক্টর ( উত্স ) এর ওভারহেড সহ ডেটা টাইপ আকারগুলি দেখতে পারি :

> object.size(1:1000)
4040 bytes
> object.size(as.numeric(1:1000))
8040 bytes

1

আমার বোধগম্যতার জন্য - আমরা কোনও ডেটা টাইপের সাথে একটি ভেরিয়েবল ঘোষণা করি না তাই ডিফল্টরূপে R ছাড়া কোনও সংখ্যা একটি সংখ্যা হিসাবে সেট করে। আপনি যদি লিখেছেন:

> x <- c(4L, 5L, 6L, 6L)
> class(x)
>"integer" #it would be correct

পূর্ণসংখ্যার উদাহরণ:

> x<- 2L
> print(x)

সংখ্যার উদাহরণ (অন্যান্য প্রোগ্রামিং ভাষা থেকে ডাবল / ফ্লোটের মতো)

> x<-3.4
> print(x)

1:5পূর্ণসংখ্যা তৈরি করবে এর মতো পরিসর দেখুন ।
Qwr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.