2016-07-12 21 views
0

ラスタ{ラスタ}を使用してGEOTiffデータセットを自動的にアップロードするためのループを作成しようとしています。 最初に、変数pathを使用して、すべてのファイルが保存されるフォルダを定義しました。次に、下のコードのようにループを作成しました。ここで、crop_nameは、インポートするGEOTiffデータセットの名前の可変部分を含むベクトルです。GeoTiffファイルのインポートエラー - R RASTERパッケージ

これは私が使用していたコードです:

path <- file.path("C:","Users","pbarbieri","Documents","Pietro","R Analysis", "Budgets test countries baseline scenario", "global", "crop prodution", "All") 

for (i in 1:length(crop_name)){ 

    name_file_upload <-paste(crop_name[i],"_Production.tif",sep = "") 
    path_2 <- file.path(path, name_file_upload) 
    name_file <- paste(crop_name[i], "production", sep = "_") 
    assign(name_file, raster(path_2)) 
} 

私は、コードを実行すると、私は次のようなエラーメッセージが出ます:私は手動での1をインポートしようとした場合、それにも関わらず

Error in .local(.Object, ...) : 
    `C:\Users\pbarbieri\Documents\Pietro\R Analysis\Budgets test countries baseline scenario\global\crop prodution\All\barley_Production.tif' does not exist in the file system, 
    and is not recognised as a supported dataset name. 

Error in .rasterObjectFromFile(x, band = band, objecttype = "RasterLayer", : 
Cannot create a RasterLayer object from this file. (file does not exist) 

をGEOTiffファイルは、path_2に生成され保存されたパスと同じパスを使用していますが、エラーは発生しません。 {raster}パッケージがデータセット名のアンダースコアに問題を引き起こすことがありますが、アンダースコアを削除しても問題は解決しないことがあります。私は間違って何をしていますか?

答えて

1

これはあなたの問題を解決する必要があります。

dir <- "Path to files" 
    files <- list.files(path = dir, pattern = ".tif") 
    rasters <- lapply(paste0(dir, files), raster) 

あなたは、このようstackとしてラスタのリストをここに物事のトンを行い、それら全体lapply他の機能またはそれらに彼ら自身の個々を割り当てることforループを使用することができます名前。

+0

有用なコメントありがとうございました!これは本当にすべてを簡素化する! – PietroB

1

assignを使用することは悪い考えです。代わりに、リストを使用して

x <- list() 
for() { 
    x[[i]] <- raster(path_2) 
} 

しかし、おそらくあなたが望むものであるような何か:問題を浮き彫りに考える理由はない

path <- file.path("C:/Users/pbarbieri/Documents/Pietro/R Analysis/Budgets test countries baseline scenario/global/crop prodution/All", 
    paste0(crop_name,"_Production.tif")) 
s <- stack(x) 

関連する問題