在目录中读取所有文件,并对每个数据框应用多个函数

43

我需要在一个目录中对大约300个.txt文件应用一组R命令。

我对R不是很熟悉,所以我在网上查找的所有关于循环的帮助都很混乱,或者当你需要对每个文件应用多个命令时,我无法想出如何应用循环。

我需要对目录中的每个文件(系统发育树)应用以下命令(使用R的ape库):

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

如何应用循环将这些命令应用于每个单独的.txt文件(可以使用R或Unix命令行)?输出结果(例如unrootedtree123.txt)需要为每个单独的文件设置不同的名称。

提前感谢, Dani。


你是否有文件名的向量,或者这些文件遵循某种命名规则(例如tree [3位数字])? - sebastian-c
1个回答

94
您可以获取所有文件,然后使用lapply循环,并按以下方式应用任何要应用的函数:
files <- list.files(path="path/to/dir", pattern="*.txt", full.names=TRUE, recursive=FALSE)
lapply(files, function(x) {
    t <- read.table(x, header=TRUE) # load file
    # apply function
    out <- function(t)
    # write to file
    write.table(out, "path/to/output", sep="\t", quote=FALSE, row.names=FALSE, col.names=TRUE)
})

这个不起作用。循环遍历CSV目录时会出现以下错误:scan(file = file,what = what,sep = sep,quote = quote,dec = dec,)中的错误: 第1行没有2个元素 - user3827326

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接