سؤال

هناك خيار في R للحصول على التحكم في شاشة الرقم. علي سبيل المثال:

options(digits=10)

من المفترض أن تعطي نتائج الحساب في 10 أرقام حتى نهاية جلسة R. في ملف المساعدة لـ R ، يكون تعريف معلمة الأرقام كما يلي:

الأرقام: يتحكم في عدد الأرقام للطباعة عند طباعة القيم الرقمية. إنه اقتراح فقط. القيم الصالحة هي 1...22 مع الافتراضي 7

لذلك ، تقول أن هذا اقتراح فقط. ماذا لو أحببت دائمًا عرض 10 أرقام ، وليس أكثر أو أقل؟

سؤالي الثاني هو ، ماذا لو أردت عرض أكثر من 22 رقمًا ، أي لحسابات أكثر دقة مثل 100 رقم؟ هل من الممكن مع قاعدة R ، أم أحتاج إلى حزمة/وظيفة إضافية لذلك؟

تعديل: بفضل اقتراح Jmoy ، حاولت sprintf("%.100f",pi) وأعطى

[1] "3.1415926535897931159979634685441851615905761718750000000000000000000000000000000000000000000000000000"

التي لديها 48 العشرية. هل هذا هو الحد الأقصى لتصرف R؟

هل كانت مفيدة؟

المحلول

السبب في أنه لا يوجد سوى اقتراح هو أنه يمكنك بسهولة كتابة وظيفة طباعة تجاهلت قيمة الخيارات. تستخدم وظائف الطباعة والتنسيق المدمجة options القيمة كإعداد افتراضي.

فيما يتعلق بالسؤال الثاني ، نظرًا لأن R يستخدم الحساب الدقيق المحدود ، فإن إجاباتك ليست دقيقة تتجاوز 15 أو 16 مكانًا عشريًا ، لذلك بشكل عام ، أكثر من ذلك. ال GMP و RCDD تتعامل الحزم مع الحساب الدقيق المتعدد (عبر متداخلة إلى مكتبة GMP) ، ولكن هذا يرتبط في الغالب بالأعداد الصحيحة الكبيرة بدلاً من الأماكن العشرية لمضاعفاتك.

الرياضيات أو خشب القيقب سيسمح لك بإعطاء العديد من الأماكن العشرية كما يرغب قلبك.

تعديل:
قد يكون من المفيد التفكير في الفرق بين الأماكن العشرية والأرقام المهمة. إذا كنت تقوم بإجراء اختبارات إحصائية تعتمد على الاختلافات التي تتجاوز الرقم الخامس عشر الهام ، فمن المؤكد أن تحليلك غير مرغوب فيه.

من ناحية أخرى ، إذا كنت تتعامل فقط مع أعداد صغيرة جدًا ، فهذه مشكلة أقل ، حيث يمكن لـ R التعامل مع الرقم .Machine$double.xmin (عادة 2e-308).

قارن هذين التحليلين.

x1 <- rnorm(50, 1, 1e-15)
y1 <- rnorm(50, 1 + 1e-15, 1e-15)
t.test(x1, y1)  #Should throw an error

x2 <- rnorm(50, 0, 1e-15)
y2 <- rnorm(50, 1e-15, 1e-15)
t.test(x2, y2)  #ok

في الحالة الأولى ، تحدث الاختلافات بين الأرقام فقط بعد العديد من الأرقام المهمة ، وبالتالي فإن البيانات "ثابتة تقريبًا". في الحالة الثانية ، على الرغم من أن حجم الاختلافات بين الأرقام هو نفسه ، مقارنة بحجم الأرقام نفسها فهي كبيرة.


كما ذكر E3BO ، يمكنك استخدام أرقام نقاط عائمة متعددة باستخدام Rmpfr صفقة.

mpfr("3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825")

هذه أبطأ وأكثر كثافة للذاكرة للاستخدام من العادية (الدقة المزدوجة) numeric المتجهات ، ولكن يمكن أن تكون مفيدة إذا كان لديك مشكلة غير مشروطة أو خوارزمية غير مستقرة.

نصائح أخرى

إذا كنت تنتج الإخراج بأكمله بنفسك ، فيمكنك الاستخدام sprintf(), ، على سبيل المثال

> sprintf("%.10f",0.25)
[1] "0.2500000000"

يحدد أنك تريد تنسيق رقم نقطة عائم مع عشر نقاط عشرية (في %.10f ال f هو لطف و .10 يحدد عشر نقاط عشرية).

لا أعرف أي طريقة لإجبار وظائف R أعلى من R على طباعة عدد دقيق من الأرقام.

إن عرض 100 رقم لا معنى له إذا كنت تقوم بطباعة الأرقام المعتادة لـ R ، نظرًا لأن أفضل دقة يمكنك الحصول عليها باستخدام الزوجي 64 بت هي حوالي 16 رقمًا عشريًا (انظر إلى .Machine $ double.eps على نظامك). الأرقام المتبقية ستكون مجرد خردة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top