আরে মোস্তাকিং রাস্টারদের?


10

আমি স্ক্রিপ্ট ব্যবহার করে আর একক বড় রাস্টার মধ্যে মোজাইক বিভিন্ন rasters করার চেষ্টা করছি যে পোস্ট /programming/15287807/how-can-i-create-raster-mosaic-using-list-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/createrasterimagemosaic
Vandka

উত্তর:


17

এখানে সমস্যাটি হ'ল মোজাইক এবং do.call তালিকায় একটি রাস্টার বস্তুর প্রত্যাশা করছে এবং "রেস্টার 1" ভেক্টরটিতে থাকা রাস্টার কেবল চরিত্রের নাম নয়। আপনি প্রকৃতপক্ষে কোনও ভেক্টরতে মোজাইক নাম জিজ্ঞাসা করছেন এবং রাস্টার বস্তু নয়।

# 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])
}

... একটি lapply আদেশ দিয়ে।

    rast.list <- lapply(1:length(rasters1),
 function(x) {
raster(rasters1[x])
})
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.