あなたのコメントは、現在あなたの質問自体ではありませんが、いくつかのサブディレクトリ (lecture01、lecture02 など) を含む作業ディレクトリでコードを実行することを期待していることを示しています。 data.csv ファイル。そうであり、目的が各サブディレクトリ内から csv を読み取ることである場合、残りの詳細に応じていくつかのオプションがあります。
ケース 1 : 最上位のディレクトリ名をすべて知っていて、それらが特異な可能性がある場合は、それらを直接指定します。
dirs <- c("lecture01", "lecture02", "some_other_dir")
paths <- file.path(dirs, "marks/data.csv")
ケース 2 : トップレベルのディレクトリ名を作成します。たとえば、それらがすべて「講義」で始まり、その後に 2 桁の数字が続き、01 から 15 などの数値範囲を指定できる (または具体的に指定したい) 場合:
dirs <- sprintf("lecture%02s", 1:15)
paths <- file.path(dirs, "marks/data.csv")
ケース 3 : パターンを照合して最上位のディレクトリ名を決定します。たとえば、文字列 "lecture" で始まるすべてのディレクトリ内からデータを読み取りたい場合:
matched.names <- list.files(".", pattern="^lecture")
dirs <- matched.names[file.info(matched.names)$isdir]
paths <- file.path(dirs, "marks/data.csv")
パスのベクトルを取得したら、おそらくlapply
データをリストに読み取ってさらに処理し、それぞれにベースディレクトリ名を付けます。
csv.data <- lapply(paths, read.csv)
names(csv.data) <- dirs
または、個々の CSV に対して行う処理が、データの変更や新しいバージョンの書き出しなどの副作用のためだけに行われる場合、特にそれらすべてを同時にメモリに格納したくない場合ループを使用します。
この回答が的を射ていない場合、そうでない場合でも、それに応じて質問を明確にしていただければ幸いです。