2016-07-25 65 views
1

我會寫與輸入的變化的數目的本地研發功能文件,如:寫與輸入的變化的數目A R函數文件

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

由於輸入文件可以從1變化到多達一個本地客戶需要,我想知道如何在R中實現它。

回答

2

以下是一個小例子,用於從數字列表中計算階乘... 您不必提供起始元素。

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

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

[9] 362880 3628800 
+0

太棒了!謝謝,@tokiloutok。 –

0

嘗試以下操作:

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

如何使用lapplydo.call

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

只是換行到一個函數,和你做

0

更優雅的位with magrittr:

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

PS: 其實,我建議你把它寫的方式,輸入文件名來作爲一個載體。它可能會進一步受益。類似這樣的:

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

其中x看起來像c("file1", "file2", ...)。然後,例如,如果您想要讀取並綁定文件夾中的所有表格,只需執行以下操作:

data <- list.files("dir", full.names = TRUE) %>% test()