对于一个目录中的所有文件,我想将每个文件读入数据框然后处理该文件,例如,跨列计算cor。例如:
files<-list.files(path=".") <br>
names <- substr(files,18,20)
for(i in c(1:length(names))){
name <- names[i]
assign (name, read.table(files[i]))
sapply(3:ncol(name), function(y) cor(name[, 2], name[, y], ))
}
但是'name'是代码最后一个语句中的一个字符串,我该如何处理数据框'name'?
答案 0 :(得分:3)
这正是R的列表所针对的。同时调用sapply
以获取所有相关性是不必要的,因为cor
返回相关矩阵,因此您只需要子集
R> files <- list.files(pattern = "tsv")
R> dat <- lapply(files, read.table)
R> dat
[[1]]
a b c
1 2.802164 4.835557 6
2 1.680186 4.974198 3
3 3.002777 4.670041 6
4 2.182691 5.137982 11
5 4.206979 5.170269 5
6 1.307195 4.753041 9
7 2.919497 4.657171 7
8 2.938614 5.305558 9
9 2.575200 4.893604 2
10 1.548161 4.871108 4
[[2]]
a b c
1 -1.8483890 2 6
2 -2.9035164 0 7
3 -0.6490283 1 6
4 -2.8842633 3 2
5 -1.8803775 0 12
6 -3.0267870 1 9
7 0.5287124 0 7
8 -3.7220733 0 2
9 -2.0663912 2 9
10 -1.6232248 1 6
然后,您可以lapply
再次对此list
进行处理,或将其作为一个班轮进行处理。
R> dat <- lapply(files, function(x) cor(read.table(x))[1,-1] )
R> dat
[[1]]
b c
0.27236143 -0.04973541
[[2]]
b c
-0.1440812 0.2771511
答案 1 :(得分:0)
执行此操作的方法是将您要读取的所有文件放在一个文件夹中,然后使用列表:
your.dir <- "" # adjust
files <- list.files(your.dir)
your.dfs <- lapply(file.path(your.dir, files), read.table)
your.dfs
现在是一个包含所有数据框的列表。您可以使用lapply同时对所有数据帧执行功能,也可以使用通常的子集化语法访问各个数据帧,例如your.dfs[[1]]
以访问第一个数据帧。