2012-06-21 2 views
1

Я пытаюсь сделать что-то, что, по моему мнению, должно быть достаточно прямым, но до сих пор мне не удалось это понять (неудивительно, что я нооб).Подсказка пользователя для нескольких входных файлов в R

Я хочу, чтобы иметь возможность запрашивать пользователя для ввода файла (ов) в R. Я успешно использовал file.choose(), чтобы получить один файл, но я хотел бы иметь возможность выбрать более одного файла в время.

Я пытаюсь написать программу, которая всасывает ежедневные файлы данных с тем же заголовком и добавляет их в один большой месячный файл. Я могу сделать это в консоли, импортируя файлы по отдельности, а затем используя rbind(file1, file2,...), но мне нужен сценарий для автоматизации процесса. Количество файлов для добавления не обязательно будет постоянным между прогонами.

Благодаря

Обновление: Вот код, который я придумал, что работает для меня, может быть, это будет полезно для кого-то еще, а

library (tcltk) 
File.names <- tk_choose.files() #Prompts user for files to be combined 
Num.Files <-NROW(File.names)  # Gets number of files selected by user 

# Create one large file by combining all files 
Combined.file <- read.delim(File.names [1], header=TRUE, skip=2) #read in first file of list selected by user 
for(i in 2:Num.Files){ 
         temp <- read.delim(File.names [i], header=TRUE, skip=2) #temporary file reads in next file 
         Combined.file <-rbind(Combined.file, temp)    #appends Combined file with the last file read in 
         i<-i+1 
} 
output.dir <- dirname(File.names [1]) #Finds directory of the files that were selected 

setwd(output.dir)      #Changes directory so output file is in same    directory as input files 
output <-readline(prompt = "Output Filename: ")  #Prompts user for output file name 
outfile.name <- paste(output, ".txt", sep="", collapse=NULL) 
write.table(Combined.file, file= outfile.name, sep= "\t", col.names = TRUE, row.names=FALSE)` #write tab delimited text file in same dir that original files are in 

ответ

2

Вы пробовали ?choose.files

Use a Windows file dialog to choose a list of zero or more files interactively. 
+0

choose.files это окно конкретные I верить. – ALiX

+0

Спасибо, это именно то, что я искал! –

+0

Я могу использовать 'tk_choose.files()' на mac после установки пакета tcltk –

1

Если вы хотите ввести имя каждого файла, почему бы просто не перебрать все файлы вроде этого:

filenames <- c("file1", "file2", "file3") 
filecontents <- lapply(filenames, function(fname) {<insert code for reading file here>}) 
bigfile <- do.call(rbind, filecontents) 

Если ваш код должен быть интерактивным, вы можете использовать функцию readline в цикле, который перестанет просить больше файлов, когда пользователь вводит пустую строку:

getFilenames <- function() { 
    filenames <- list() 
    x <- readline("Filename: ") 
    while (x != "") { 
     filenames <- append(filenames, x) 
     x <- readline("Filename: ") 
    } 
    filenames 
} 
Смежные вопросы