1

对于一个目录中的所有文件,我想将每个文件读入一个数据框,然后处理该文件,例如,跨列计算 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], ))      
}

但是“名称”是代码最后一条语句中的字符串,我该如何处理数据框“名称”?

4

2 回答 2

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 
于 2013-11-12T13:06:15.460 回答
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]]访问第一个数据框。

于 2013-11-12T12:59:19.433 回答