R में मोज़ेकिंग रस्टर्स?


10

मैं R में एकल बड़े रेखापुंज में कई चूहों को मोज़ेक करने की कोशिश कर रहा हूं। स्क्रिप्ट का उपयोग करके जो /programming/15287807/how-can-i-create-raster-mosaic-using-of-rasters में पोस्ट किया गया है लेकिन, मुझे एक चेतावनी संदेश और त्रुटि संदेश मिला है।

rasters1 <- list.files("F:\\MOD15A2_LAI_1km\\MOD15A2_LAI_2009", 
                      pattern = "mod15a2.a2009001.*.005.*.img$", 
                      full.names = TRUE, recursive = TRUE)

mos1 <-mosaic(rasters1, fun=mean)

यह नीचे के रूप में त्रुटि रिपोर्ट कर रहा था

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘extent’ for signature ‘"character"

फिर मैंने एक और संस्करण की कोशिश की।

rasters1.mosaicargs <- rasters1
rasters1.mosaicargs$fun <- mean

लेकिन यहाँ नीचे के रूप में कुछ चेतावनी संदेश दिया गया है

Warning message:
In rasters1.mosaicargs$fun <- mean : Coercing LHS to a list

मैंने संदेश को नजरअंदाज किया और फिर जारी रखा

mos2 <- do.call(mosaic, rasters1.mosaicargs)

लेकिन यहाँ ऊपर के रूप में एक ही त्रुटि का उल्लेख है

Error in (function (classes, fdef, mtable)  : 
  unable to find an inherited method for function ‘mosaic’ for signature ‘"character", "character"

मैंने स्क्रिप्ट का अनुसरण भी किया है, लेकिन यह nceas.ucsb.edu/scicomp/usecases/craitasterimagemosaic
Vandka

जवाबों:


17

यहाँ मुद्दा यह है कि मोज़ेक और do.call सूची में एक रेखापुंज वस्तु की अपेक्षा कर रहे हैं और न कि केवल उस रेखापुंज के चरित्र नाम जो "rasters1" वेक्टर में निहित है। आप वास्तव में, वेक्टर में एक नाम को मोज़ेक करने के लिए कह रहे हैं, न कि एक रेखीय वस्तु।

# Create some example data
require(raster)
    r <- raster(ncol=100, nrow=100)
      r1 <- crop(r, extent(-10, 11, -10, 11))
        r1[] <- 1:ncell(r1)
          r2 <- crop(r, extent(0, 20, 0, 20))
          r2[] <- 1:ncell(r2)
      r3 <- crop(r, extent(9, 30, 9, 30))
    r3[] <- 1:ncell(r3)

# If I create a list object of the raster names, as your are doing with list.files, 
#    do.call will fail with a character signature error 
rast.list <- list("r1","r2","r3")   
  rast.list$fun <- mean     
    rast.mosaic <- do.call(mosaic,rast.list)

# However, if I create a list contaning raster objects, the do.call function 
#   will work when mosaic is passed to it.      
rast.list <- list(r1, r2, r3)     
  rast.list$fun <- mean
    rast.mosaic <- do.call(mosaic,rast.list)
      plot(rast.mosaic)

# You could specify a for loop to create a list object, 
#   contaning raster objects
rasters1 <- list.files("F:/MOD15A2_LAI_1km/MOD15A2_LAI_2009", 
                       pattern="mod15a2.a2009001.*.005.*.img$", 
                       full.names=TRUE, recursive=TRUE)
rast.list <- list()
  for(i in 1:length(rasters1)) { rast.list[i] <- raster(rasters1[i]) }

# And then use do.call on the list of raster objects
rast.list$fun <- mean
  rast.mosaic <- do.call(mosaic,rast.list)
    plot(rast.mosaic)

1

विषय पर बस एक मामूली बदलाव। आप एक रिक्त सूची और लूप के लिए निर्माण से बच सकते हैं ...

    rast.list <- list()

    for(i in 1:length(rasters1)) { 
rast.list[i] <- raster(rasters1[i])
}

... लप्पली कमांड के साथ।

    rast.list <- lapply(1:length(rasters1),
 function(x) {
raster(rasters1[x])
})
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.