異なるフォルダのデータをマージしたい。したがって、私はまず現在の作業ディレクトリ(list.dirs()を使って)にすべてのマップ名を持つオブジェクトを作成します。その後、特定のファイル名(私のパターン)をすべてのマップで調べます。 問題は、ファイルにこの特定の文字列が含まれていない場合、list.files()がエラーを返すことです。list.files()は、Rにパターンを含まないパスを無視できますか?
(Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") : cannot open file 'NA': No such file or directory).
パターンを含むことがわかっているマップのみを選択すると、コードが機能します。
誰かがlist.files()に特定のパターンを含まないパスを無視する方法を知っていますか?
これは私のコードです:
GS.dir<- list.dirs(path = ".", recursive = TRUE)
ligustrum <- c()
for (j in 1:length(GS.dir)){
files <- list.files(GS.dir[j], pattern = glob2rx("li*Avg.txt"), full.names = TRUE)
if(!is.null(files)){
for (i in 1:length(files)){
plot <- read.table(files[i], header = TRUE, sep = ",")
datum <- substr(files[i], 1, 8)
nummer <- substr(files[i], nchar(files[i]) - 7, nchar(files[i]) - 7)
plot.date <- data.frame("Date" = rep(datum, length(plot[,1])),
"plotnr"=rep(nummer,length(plot[,1])),
plot
)
ligustrum <- rbind(ligustrum, plot.date)
}
} else {
ligustrum <- ligustrum
}
}
write.table(ligustrum, "ligustrum.txt", sep = ";", row.names = FALSE)
はあなたのコードが失敗した時に、特定のポイントを調査したことがありますか? 'for'ループでは、それらを実行して失敗させ、入力値が何であるかを調べることができます(あなたの場合は' j'と 'i')。これらの入力を使用して、コードの各ステップを実行して、どこにどのように障害が発生しているかを確認します。 – rosscova
"文字列なし"を扱うには2つの方法があります。これをテストし、何らかの理由でそれを回避または処理する 'if'関数を使用するか、' tryCatch'を使用してエラーをキャッチして処理します。この方法では、実行は停止せず、関数はさらに実行されます。 –