2016-06-11 2 views
0

Я относительно новичок в R и борюсь с извлечением файлов. У меня есть список файлов CSV (то есть 001.csv, 002.csv, ....) в моем каталоге xyz и вам нужно извлечь конкретный файл на основе ввода, данного пользователем. Ввод пользователя осуществляется в форме 1, 2 ... (хранится в y), который я пробовал преобразовать ведущими 0.R - Как извлечь файл из каталога на основе ввода пользователя

Когда я запускаю код

filename = as.character(formatC(y, width=3, flag=0)) 

list.files(directory,pattern = "^",filename,"\\.csv$") 

я получить результат

character[0] 

который подразумевает мой шаблон код неверен, я хочу файл, например: 001.csv быть извлеченной

Кто-нибудь может мне помочь?

+1

Попробуйте 'файлы <- list.files (directory, pattern = paste0 ("^", filename,". * \\. Csv $ "))' –

ответ

0

Кажется, вы пропустили шаблон, который будет соответствовать любому файлу, который начинается с filename, тогда он может соответствовать любым символам 0+ и заканчивается .csv.

Чтобы построить его, используйте paste0:

files <- list.files(directory, pattern = paste0("^", filename, ".*\\.csv$")) 

Где:

  • "^" - начало имени файла строки
  • filename - имя файла, вы передаете
  • ".*\\.csv$" - любой 0 + символов (.*), а затем .csv ()) в конце строки ($).
0

filename = as.character(formatC(y, width=3, flag=0))

formatC флаг 0, кажется, работает только для числовых объектов; если вы читаете пользовательский ввод y с e. г. y = readline(), y имеет характер «характер». Вы получаете желаемое форматирование с

filename = formatC(as.integer(y), width=3, flag=0) 

(as.character() не требуется, так как значение formatC() уже имеет этот тип).

list.files(directory,pattern = "^",filename,"\\.csv$")

Это не правильное использование

list.files(path = ".", pattern = NULL, all.files = FALSE, 
      full.names = FALSE, recursive = FALSE, 
      ignore.case = FALSE) 

- конечно, вы имели в виду конкатенировать "^", filename и "\\.csv$".

Все сказано, что я предлагаю построить полный шаблон имени файла с помощью sprintf(), i. е.:

filename = sprintf("%03d\\.csv", as.integer(y)) 
list.files(directory, filename) 
Смежные вопросы