2017-04-07 9 views
0

私は長いコードを多数のループで構成しています。開始点はアップロードされた画像で、コードは複数のステップで画像を解析します。大きなフォルダの画像にのみコードを適用する

「Ai Bj Ck.tif」などのタイトルを作って、Ai、Bi、Ciなどの要素で構成される100個の画像があります。私は、i = 1:10、j = 1:10、およびk = 1:10を定義したが、すべてのオプションが存在するわけではない。たとえば、画像「A5 B2 C9.tif」は存在しません。

可能なすべてのイメージタイトルを作成するループにコードを実装し、if(file.exists(...)){code}を使用して実際に存在するイメージを選択し、コード全体を実行します簡単にするために最初の画像は、次のいずれかのように...

に、コードは単にその寸法の画像のアップロードや計算もしてみましょう:

Image_name = list() 
for(i in 1:10){ 
    for(j in 1:10){ 
     for(k in 1:10)){ 
Image_name[i, j, k] = paste("A", i, "B", j, "C", k, ".tif", sep= "")) 
}}} 

if(file.exists(Image_name)){ 
f = readImage(Image_name) 
dim(f) 
} 

それは動作しません。画像の正しいリストを作成せず、次元を計算するために一度に1つの画像をアップロードしません。なにが問題ですか?前もって感謝します!

+0

'... [i、j、k]'は3次元配列をインデックスするためのものです。あなたはそのような配列を持っていません! 2番目の注意: 'file.exists(...)'は文字ベクトルを引数として取ります。配列ではなくリストではありません。 – jogo

+1

あなたはlist.files(pattern = "* .tif")を使用していますか? –

+0

http://stackoverflow.com/questions/43275406/import-files-using-key-words – jogo

答えて

1

あなたのデータ構造は間違っています。 ...[i, j, k]は、3次元配列を索引付けするためのものです。あなたはそのような配列を持っていません! 2番目の注釈:file.exists(...)は、文字ベクトルを引数として取ります。配列ではなく、リストではありません。今、あなたは

lapply(I_files, ...) 
+0

ありがとうございました!expand.gridと関数を使用すると便利です:-) – Gabriel123

1

で既存のファイル名をループあなたは、フォルダ内のファイルを一覧表示するlist.files()を使用することができ

i <- j <- k <- 1:10 
ijk <- expand.grid(i,j,k) 
names(ijk) <- c("i", "j", "k") 
Image_names <- with(ijk, paste0("A", i, "B", j, "C", k, ".tif")) 
ind <- file.exists(Image_names) 
I_files <- Image_names[ind] # existing file names as character vector 


はあなたのような何かをしたいです。関数内にパスを追加すると、その場所にあるすべてのファイルを検索するようにRに指示されます。この機能では、すべてのtifファイルなどのパターンを入力することもできます。

I_files = list.files("your_path", pattern = "*.tif", full.names = T) 
# This will give you a character vector with the document names like 
# "your_path/A1B1C1.tif", "your_path/A2B1C1.tif", ... . 

library(EBImage) 
your_images = sapply(I_files, readImage) 
+0

ありがとうございました!それは簡単に動作します – Gabriel123

関連する問題