使用不同数量的输入文件编写R函数

时间:2016-07-25 13:37:05

标签: r

我会用不同数量的输入文件编写一个本地R函数,例如:

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

由于输入文件可以从1变化到本地客户想要的数量,我想知道如何在R中实现它。

4 个答案:

答案 0 :(得分:3)

以下是从数字列表中计算阶乘的一个小例子...... 你不必给出起始元素。

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

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

[9]  362880 3628800

答案 1 :(得分:0)

尝试以下方法:

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

答案 2 :(得分:0)

如何使用lapplydo.call

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

只需将其包装成一个函数即可完成

答案 3 :(得分:0)

与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()