我会用不同数量的输入文件编写一个本地R函数,例如:
test<-function(file1, file2, ...){
dat1<-read.table(file1)
dat2<-read.table(file2)
....
dat<-cbind.data.frame(dat1, dat2, ...)
return(dat)
}
由于输入文件可以从1变化到本地客户想要的数量,我想知道如何在R中实现它。
答案 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)
如何使用lapply
和do.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()