2016-10-19 3 views
0

固定パスと、年間のディレクトリが非常に限られているとします。 、および異なる、非固定と非均等量fixPathの各組み合わせに含まれるサブディレクトリを - 私はこの最初の組み合わせ(年fixPath) - との間の経路の各組み合わせを取得しようとしている年forループの各繰り返しから複数の出力を格納します。

fixPath <- "C:/Users/calcazar/Desktop/example" 
year <- 2008:2010 
pathVector <- paste(fixPath, year, sep = "/") 
pathVector 
[1] "C:/Users/calcazar/Desktop/example/2008" "C:/Users/calcazar/Desktop/example/2009" 
[3] "C:/Users/calcazar/Desktop/example/2010" 

この問題を解決するための私のアプローチは、forループを使用です:

  1. setwd(pathVector[1])
  2. での作業ディレクトリを設定しFILをスキャンその作業ディレクトリ内list.filesとES(サブディレクトリ)で、それぞれの組み合わせを得る:paste(pathVector[1], list.files(pathVector[1]), sep = "/")
  3. ストアベクトルで、この組み合わせとループの各反復から次の反復

...しかしを進めます私にはたくさんの組み合わせがあり、繰り返しのたびに複数の格納方法を理解することはできません。ここに私のコードは次のとおりです。

for (i in seq_along(pathVector)) { 
setwd(pathVector[i]) 
# here I only obtain the combination of the last iteration 
# and if I use pathFinal[i] I only obtain the first combination of each iteration 
pathFinal <- paste(pathVector[i], list.files(pathVector[i]), sep = "/") 
# print give me all the combinations 
print(pathFinal[i]) 
} 

だから、はどのようにするループの各反復から複数の値(の組み合わせ)を保存できますか?

私は、たとえば、すべての組み合わせが含まれているベクトルをしたい:

"C:/Users/calcazar/Desktop/example/2008/a" 
"C:/Users/calcazar/Desktop/example/2008/z" 
"C:/Users/calcazar/Desktop/example/2009/b" 
"C:/Users/calcazar/Desktop/example/2009/z" 
"C:/Users/calcazar/Desktop/example/2009/y" 
"C:/Users/calcazar/Desktop/example/2010/u" 
+2

このタスクで 'list.files(full.names = TRUE、recursive = TRUE)'は役に立ちますか? – roman

+0

いいえ、動作しません。 'full.names = TRUE'と' recursive = TRUE'をどのように適用できるのか? (fixPath、full.names = TRUE、recursive = TRUE) ' –

+0

' list.files(fixPath、recursive = TRUE、include.dirs = TRUE) 'うまく動作します! –

答えて

1

このようなことは何をしたいですか?

pathFinal = NULL 

for (i in seq_along(pathVector)) { 
    setwd(pathVector[i]) 

    pathFinal <- c(pathFinal, paste(pathVector[i], list.files(pathVector[i]), sep = "/")) 

    print(pathFinal[i]) 
} 
+1

代入演算子 "c"はすべての組み合わせをカプセル化するジョブを行いますが、print関数は最初の繰り返しの組み合わせのみを表示します。ところであなたの答えをありがとう! –

+0

私たちは途中にいるので! :)すべてのサブディレクトリをすべての繰り返しで印刷したいですか?ペースト引数( 'paste(pathVector [i]、list.files(pathVector [i])、sep ="/")')を印刷するだけで済みます。または、各繰り返しごとにすべてのサブディレクトリを持つリストを用意したいと思いますか? – User2321

1

あなたは事前にベクトルを設定しようとすると、ループのためにあなたにこの部品を使用することがあります:

append(VectorName, pathFinal[i]) 

あなたはこのようなあなたの既存のコードにそれを含めることを試みるかもしれない

pathFinal <- append(pathFinal, paste(pathVector[i], list.files(pathVector[i]), sep = "/")) 

私はhavこれをチェックしないでくださいが、それぞれの新しい値が目的のベクトルに追加されます。また、私はあなたがsetwd()を使用する必要はないと思う。

+0

または 'foreach'ライブラリを使用してください。 – Henk

+0

append関数は、各反復ですべての組み合わせをカプセル化するという仕事をします。あなたは正しい、 "setwd"の使用は冗長です。どうも! –

関連する問題