RasterLayer के लिए @ डेटा @ मान स्लॉट केवल तार्किक (0) क्यों नहीं है और वास्तविक मान नहीं है?


12

जब मैं NDVI के एक रेखापुंज में पढ़ता हूं, तो इसकी तह तक जाने की कोशिश करने पर, @ डेटा @ मान स्लॉट में वास्तविक मान नहीं होते हैं जब तक कि मैं उन्हें मैन्युअल रूप से सेट नहीं करता हूं। उदाहरण के लिए:

    NDVI <- raster("./filename.tif", crs="+proj=longlat +datum=WGS84")
    NDVI@data@values
            ## returns: logical(0)

यह अन्य चूहों के साथ नहीं हुआ था जिन्हें मैंने उसी विधि से लोड किया था, इसलिए मैं भ्रमित हूं। मैं चाहता हूं कि मैं और अधिक विशिष्ट हो सकूं लेकिन मुझे इससे पहले कुछ अलग करने की याद नहीं है। मान का उपयोग करके मैन्युअल रूप से प्राप्त करना काफी आसान है:

    NDVI1@data@values <- getValues(NDVI19east)

लेकिन यह अभी भी हर फ़ाइल के लिए ऐसा करने के लिए एक दर्द है। तो, दो-भाग प्रश्न:

  1. पहली बार में ऐसा क्यों हुआ? मैं समझता हूं कि इससे कुछ हो सकता है कि रैस्टर फाइल को कैसे स्टोर किया जा रहा है (यानी यह मेमोरी में है या नहीं) लेकिन मैं वास्तव में समझ नहीं पा रहा हूं कि डेटा को एक्सेस करने के लिए मुझे उन तरीकों को कैसे बदलना चाहिए ...

  2. क्या इस प्रक्रिया को स्वचालित करने का एक तरीका है (शायद lapply के समान विधि का उपयोग करके) RasterLayers के रूप में फ़ाइलों को पढ़ने और उन फ़ाइलों के लिए मानों तक पहुँचने के लिए? मेरी वर्तमान परियोजना में एनडीवीआई, वर्षा और अन्य पर्यावरणीय चर के लिए एक समय में 6-10 फाइलें पढ़ना शामिल है, ताकि उन्हें संयोजित किया जा सके और कुछ भारित ओवरले का प्रदर्शन किया जा सके। यह डेटा आयात करने की प्रक्रिया को स्वचालित करने में मददगार होगा।


6
जब तक आप आंतरिक कोड विकसित नहीं कर रहे हैं, तब तक @ का उपयोग न करें - readAll (NDVI) का उपयोग करें। यह एक मेमोरी-दक्षता तकनीक के रूप में होता है, आप बहुत बड़े ग्रिड को एक वादे के रूप में खोल सकते हैं - रेखापुंज डेटा में खींचने के लिए वादे (rgdal के माध्यम से, इस मामले में GDAL के माध्यम से) जब आपको वास्तव में नंबरों की आवश्यकता होती है। यदि आपको ऑब्जेक्ट को एक स्टैंडअलोन R ऑब्जेक्ट के रूप में सहेजने की आवश्यकता है, जो कि रीड रीड से जुड़ी नहीं है, तो यह करने का तरीका है। देखें; रेखापुंज "कई मामलों में। (शुरू में) (RAM) में कोई सेल (पिक्सेल) मान नहीं होता है"
mdsumner

2
logical(0)वास्तव में के लिए मूल्य है किसी भी रेखापुंज * एक फ़ाइल से बनाया वस्तु। किसी भी तरह से, @ ममस्डरर कहते हैं, सीधे इन मूल्यों को न पढ़ें, और निश्चित रूप से उन्हें सेट न करें! (हालांकि आपका कुछ भीNDVI1@data@values <- getValues(NDVI19east) प्रभावित नहीं करेगा , इन मूल्यों की अनदेखी की जाती है)। यह संभवतः आपकी स्क्रिप्ट को और नीचे ले जाता है जहाँ आपको समझ नहीं आता कि इन वस्तुओं का प्रभावी ढंग से उपयोग कैसे किया जाए। आप getValues ​​का उपयोग कर सकते हैं, लेकिन यहां तक ​​कि शायद ही कभी आवश्यक है। एक सरल, आत्म-निहित, जो आप हासिल करने की कोशिश कर रहे हैं, उसका उदाहरण प्रदान करें।
रॉबर्ट हिजमन

2
बहुत बहुत धन्यवाद। मैं पूरा कर रहा हूँ जो मुझे readAll () के साथ चाहिए था जैसा कि mdsumner ने कहा, इसलिए उसके लिए धन्यवाद - यह अच्छी सलाह थी! मैं हाल ही में रास्टर पैकेज के लिए नया था, इसलिए मुझे ईमानदारी से अभी तक उस फ़ंक्शन के बारे में पता नहीं था और बड़ी फ़ाइलों के वास्तविक मूल्यों तक पहुंचने के लिए इसका उपयोग करने की आवश्यकता थी।
हेनरी हॉकिन्स वेल्स

जवाबों:


3

इस सवाल का जवाब टिप्पणियों में दिया गया है ( mdsummer द्वारा )। यह उन विचारों को क्रम में रखने और इस प्रश्न को अनुत्तरित कतार से बाहर निकालने का एक तरीका है।

यहाँ आप विश्व व्यापी jpg के NVDI को nasa से डाउनलोड कर सकते हैं

यहां आपके पास कूट करने के लिए कोड और एक रेखापुंज फ़ाइल है

जैसा कि प्रश्न में दिखाया गया है, रेखापुंज को आर के साथ रेखापुंज () फ़ंक्शन में लोड करना वास्तविक मानों को स्मृति में लोड नहीं करता है।

यहाँ छवि विवरण दर्ज करें

जैसा कि आप देखते हैं, एनवीडीआई @ डेटा @ मानों का कोई मूल्य नहीं है, जबकि भूखंड को उन "हाईडेन" मूल्यों को दर्शाया जा सकता है। आप देख सकते हैं कि, यदि आप फ़ाइल को QGIS में लोड करते हैं, तो मूल्य वास्तव में पढ़े जाते हैं।

यहाँ छवि विवरण दर्ज करें

तो, आपको रैस्टर पैकेज से रीडऑल () फ़ंक्शन का उपयोग करना होगा (जैसा कि mdsummer ने टिप्पणियों में कहा है)। यहाँ कोड है:

library(raster)

NDVI <- raster("./RenderData.tif", crs="+proj=longlat +datum=WGS84")
NDVI@data@values
str(NDVI)
plot(NDVI)

NDVI.all <- readAll(NDVI)
head(NDVI.all@data@values)

इस फ़ंक्शन का उपयोग करके अब आप फ़ाइल के भीतर रैस्टर मानों तक पहुंच सकते हैं।

यहाँ छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.