أكثر

دالة للخطوط النقطية الفائقة الطيفية مع 3 متغيرات خطأ غير متوقع

دالة للخطوط النقطية الفائقة الطيفية مع 3 متغيرات خطأ غير متوقع


أنا أكتب نصًا لاستخراج مؤشرات الغطاء النباتي من أنابيب البيانات الفائقة الطيفية. أحد المؤشرات هو فهرس الغطاء النباتي الثلاثي الذي كتبت له الوظيفة التالية:

TVI2 <- الوظيفة (h، m، l) {(1.5 * (2.5 * (hm) -1.3 * (hl)) / sqrt ((2 * h + 1) ^ 2- (6 * h-5 * sqrt ( م) -0.5)))}

تمثل المتغيرات أطوال موجية مختلفة في المنتدى. لدي كائن من الطوب النقطي يحتوي على جميع البيانات النقطية الثمانية و 101 نطاقًا لكل خطوط نقطية. لاستدعاء خط نقطي وطول موجي معين أستخدم:

النقطية (r [[1]] ، الطبقة = 1)

وهذا يعمل بشكل جيد لحساب فهرس بمتغيرين فقط ، مثل دالة NDVI:

ndvi1 <- NDVI (النقطية (r [[1]] ، الطبقة = 41) ، (النقطية (r [[1]] ، الطبقة = 71)))

ومع ذلك ، إذا كنت أرغب في استخدام نفس الإعداد لوظيفة TVI2:

tvi1 <- TVI2 (النقطية (r [[1]] ، الطبقة = 71) ، (النقطية (r [[1]] ، الطبقة = 45) ، (النقطية (r [[1]] ، الطبقة = 21))) )

ما زلت أتلقى الخطأ التالي:

خطأ: 'غير متوقع ،' في "tvi1 <- TVI2 (نقطية (r [[1]] ، layer = 71) ، (نقطية (r [[1]] ، layer = 45) ،"

يبدو أنني لا أستطيع معرفة السبب. إذا لم أستخدم استدعاء البيانات النقطية باعتباره المتغير الأخير ، ولكن مجرد رقم ، فإن الوظيفة تعمل بشكل جيد.

أي أفكار بشأن كيفية حل هذا؟


تحتاج إلى تمرير وظيفتك إلى "التراكب" جنبًا إلى جنب مع النطاقات الطيفية المناسبة في الطوب النقطي. هذا المثال من شأنه أن يسحب النطاقات 71 و 45 و 21 من جسم من الطوب.

tvi1 <- تراكب (r [[71]] ، r [[45]] ، r [[21]] ، fun = TVI2)

قد تحتاج إلى إعادة كتابة وظيفتك حتى يتم احتساب حالات الخطأ.

لست واضحًا بشأن بنية البيانات الخاصة بك ، يبدو الأمر غريبًا ولا تقدم معلومات كافية لفهم كيفية تنسيق بياناتك. نظرًا لأن بناء الجملة غالبًا ما يكون في قلب مشكلات R ، فهذه مشكلة. لن تحتاج إلى إجبار كل فرقة باستخدام خطوط المسح. النطاقات الموجودة في مكدس / قالب نقطي هي بالفعل كائنات نقطية. إذا كانت "r" مجرد قائمة بالأسماء النقطية ، فيجب عليك إنشاء مكدس أو قالب نقطي فعلي. هل تقوم بتخزين سلسلة من الطوب النقطي في قائمة؟ إذا كان الأمر كذلك لماذا؟


لذلك لديك قائمة من 8 كائنات RasterBrick

r <- lapply (1: 8، function (x) brick (system.file ("external / rlogo.grd"، package = "raster")))

ووظيفة

TVI2 <- الوظيفة (h، m، l) {(1.5 * (2.5 * (hm) -1.3 * (hl)) / sqrt ((2 * h + 1) ^ 2- (6 * h-5 * sqrt ( م) -0.5)))}

الآن يمكنك أن تفعل

x <- TVI2 (النقطية (r [[1]] ، الطبقة = 1) ، النقطية (r [[1]] ، الطبقة = 2) ، النقطية (r [[1]] ، الطبقة = 3))

وهو ما يعادل

x <- TVI2 (نقطية (r [[1]] [[1]]) ، نقطية (r [[1]] [[2]]) ، نقطية (r [[1]] [[3]]))

هذا لم ينجح معك لأن القوسين غير متطابقين. أو باتباع جيفري إيفانز:

y <- تراكب (r [[1]] [[1: 3]] ، fun = TVI2)

مع الفهارس التي تستخدمها (لن يعمل هذا مع بيانات المثال)

تراكب (r [[1]] [[c (71، 45، 21)]]، fun = TVI2)

الاتصالTVI2معتراكبيجب أن يكون أكثر كفاءة من الاتصال به مباشرة معالنقطيةالحجج


شاهد الفيديو: معادلة دالة الخطأ الثلاثية