2013-02-19 37 views
26

Tôi cần áp dụng một bộ lệnh trong R cho tất cả các tệp .txt riêng lẻ (khoảng 300) trong một thư mục.Lặp qua tất cả các tệp trong thư mục trong R, áp dụng nhiều lệnh

Tôi không quen thuộc với R, vì vậy tất cả trợ giúp tôi đã xem xét trực tuyến về lặp là khó hiểu hoặc tôi không thể làm cách nào để áp dụng vòng lặp khi bạn cần áp dụng nhiều lệnh cho mỗi tệp .

Các lệnh tôi cần phải áp dụng cho mỗi tập tin (cây phát sinh loài) trong thư mục được (trong đó sử dụng thư viện vượn R):

testtree <- read.tree("tree123.txt") 
unrooted_tr <- unroot(testtree) 
write.tree(unrooted_tr, file="unrootedtree123.txt") 

Làm thế nào để áp dụng một vòng lặp đó sẽ áp dụng các lệnh này để mỗi cá nhân .txt tập tin (hoặc bằng cách sử dụng R hoặc trong dòng lệnh Unix)? Kết quả đầu ra (ví dụ: unrootedtree123.txt) sẽ cần phải có tên khác cho từng tệp riêng lẻ.

Xin cảm ơn trước, Dani.

+0

Bạn có vector của tên tập tin hoặc làm các tập tin theo một số loại quy ước đặt tên (ví dụ cây [3digitnumber])? –

Trả lời

47

Bạn có thể nhận được tất cả các tập tin và sau đó vòng lặp sử dụng lapply và áp dụng bất cứ chức năng bạn muốn áp dụng như sau:

files <- list.files(path="path/to/dir", pattern="*.txt", full.names=T, recursive=FALSE) 
lapply(files, function(x) { 
    t <- read.table(x, header=T) # load file 
    # apply function 
    out <- function(t) 
    # write to file 
    write.table(out, "path/to/output", sep="\t", quote=F, row.names=F, col.names=T) 
}) 
Các vấn đề liên quan