2016-07-25 18 views
1

ich eine lokale R-Funktion mit unterschiedlicher Anzahl von Eingang schreiben würde Dateien wie:schreibt R-Funktion mit unterschiedlicher Anzahl von Eingabedateien

test<-function(file1, file2, ...){ 
    dat1<-read.table(file1) 
    dat2<-read.table(file2) 
    .... 
    dat<-cbind.data.frame(dat1, dat2, ...) 
    return(dat) 
} 

Da die Eingabedateien von 1 bis so viele wie ein variiert werden Ich möchte gerne wissen, wie man es in R realisiert.

Antwort

2

Hier ist ein kleines Beispiel, um faktoriales aus einer Liste von Zahlen zu berechnen ... Sie müssen die Startelemente nicht geben.

test<-function(...){ 
    lapply(list(...), factorial) 
} 
test(1:10) 

[[1]] 
[1]  1  2  6  24  120  720 5040 40320 

[9] 362880 3628800 
+0

Großartig! Danke, @Tokiloutok. –

0

Versuchen Sie Folgendes:

test <- function(...) { 
    files <- list(...); 
    data <- lapply(files, read.table); 
    return(do.call(cbind, data)); 
} 
0

Wie wäre es mit lapply und do.call:

your_files = c('a.txt', 'b.txt') 
do.call(what = 'cbind', args = lapply(your_files, read.table)) 

wickeln nur, dass in eine Funktion und Sie

0

Ein bisschen mehr elegant getan mit magrittr:

library(magrittr) 
test <- function(...){ 
    list(...) %>% 
     lapply(read.table) %>% 
     do.call(cbind, .) 
} 

PS: Eigentlich würde ich empfehlen, es in einer Art und Weise zu schreiben, dass die Eingabe von Dateinamen als einzigen Vektor kommen. Es kann weiter profitieren. Etwas wie dieses:

test <- function(x){ 
    lapply(x, read.table) %>% do.call(cbind, .) 
} 

Wo x wie c("file1", "file2", ...) aussieht. Dann, wenn Sie zum Beispiel alle Tabellen in einem Ordner lesen und binden möchten, können Sie einfach

Verwandte Themen