2016-03-15 3 views
0

В настоящее время я читаю в файле, как пример ниже, есть способ указать, чтобы прочитать последнюю версию файла, т.е. если у меня есть файлы, сохраненные как «Abroad v1.csv» "," За границей v2.csv "Я бы хотел, чтобы он взял последнее, которое в этом случае было бы 2.R, читаемый в последней версии файла

year <- "2015" 
species <- "HOM" 

root <- "Y:/Pelagic Work/FIN Data" 
file <- "Abroad.csv" 
ABR <- file.path(root, year, species, file) 
+0

Возможно, 'tail (list.files (". "," Abroad * .csv "), 1)'? – zx8754

+0

Связанный пост: [Как отсортировать список файлов по дате] (http://stackoverflow.com/questions/13762224/how-to-sort-files-list-by-date) – zx8754

ответ

1

Если вообще разумным, было бы лучше, чтобы определить «последнюю» версию файла с данными в file.info выходе (this post, также предложил zx8754, хороший ответ на это).

Если вы должны сделать это по имени файла, будьте очень осторожны и осведомлены о том, как ваша операционная система собирается сортировать символы. Возьмем, к примеру, этот пример.

files <- paste0("somepath/directory/filename v", 1:10, ".csv") 

basenames <- basename(files) 

sort(basenames) 

[1] "filename v1.csv" "filename v10.csv" "filename v2.csv" "filename v3.csv" "filename v4.csv" 
[6] "filename v5.csv" "filename v6.csv" "filename v7.csv" "filename v8.csv" "filename v9.csv" 

Как вы можете видеть, filename v10.csv' appears in the second position and would not be picked up by simple methods such at хвост (basenames, 1) `. Вместо этого вам нужно вычеркнуть все символы, кроме тех, которые задают порядок версий, конвертировать в правильный формат, а затем сортировать. Вот пример того, как это сделать с целыми версиями, как вы предполагали.

Files <- data.frame(path = dirname(files), 
        file = basename(files), 
        stringsAsFactors = FALSE) 
Files$v_number <- gsub("(^filename v|[.]csv$)", "", basenames) 
Files$v_number <- as.numeric(Files$v_number) 

Files <- Files[order(Files$v_number), , drop = FALSE] 
tail(Files, 1) 

Это, впрочем, неудобно и подвержено ошибкам. Если это вообще возможно, я бы рекомендовал перейти к базе данных, или к управлению версиями, или к тем и другим.

+2

'gtools :: mixedsort' полезен для Это дело. –

+0

Я забыл о 'mixedsort'. Я думаю, что «полезный для этого случая» является чем-то вроде преуменьшения. – Benjamin

Смежные вопросы