如何从文本文件列表中提取矢量

How can I extract a vector from a list of text files

我有许多具有相同结构(900*600 像素)的不同文本文件。现在我想从每个文本文件中提取 900*600 个向量,每个向量包含一个数据点。 例如,我想要一个来自位置 (x1,y1) 的向量,其中包含来自所有文本文件的所有数据点。

在这里您可以看到我的代码,以便生成包含所有文本文件的列表。

file.list = list.files(pattern="*.txt", full.names=T)
df = data.frame( files= sapply(file.list, FUN = function(x)readChar(x, file.info(x)$size)), stringsAsFactors=FALSE)

现在 "df" 是一个包含所有文本文件的列表。 我现在如何从所有文件中提取具有值的不同向量?

到目前为止,这是我的代码。我需要以某种方式定义一个函数(FUN)。

files = lapply(df, FUN, header = F, sep="\t", skip = 2, stringsAsFactors = F)

我准备了一个虚拟数据集。

a = matrix(c(15, 12,    37, 21, 37, 26, 33, 33, 27, 38, 32, 21, 24, 18,
             20, 14, 32, 56, 16, 7, 23, 14, 34, 42), nrow = 3, ncol = 4)
b = matrix(c(14, 18,    34, 26, 37, 26, 32, 36, 21, 39, 32, 21, 22, 18,
             20, 16, 42, 50, 16, 7, 23, 12, 36, 40), nrow = 3, ncol = 4)
c = matrix(c(10, 12,    34, 29, 31, 26, 30, 30, 20, 38, 36, 21, 29, 18,
             20, 10, 32, 59, 16, 1, 23, 10, 39, 49), nrow = 3, ncol = 4)

file.list = list(a,b,c)

这里每个变量对应一个文本文件(在file.list中列出)。而不是 900*600 矩阵有 3*4 矩阵。

根据您的建议,我实现了以下功能。

cmbn = expand.grid(1:3, 1:4)
flen = length(file.list)
lapply(1:(nrow(cmbn)),function(t,lst,cmbn){
  return(sapply(1:flen,function(i,t1,lst1,cmbn1){
    return(lst1[[i]][cmbn1$Var1[t1],cmbn1$Var2[t1]])},t,lst,cmbn))}
  ,file.list,cmbn)

这应该适合你: 这将需要两个循环。不确定这是否是最优化的解决方案。

cmbn是坐标的data.frame。

cmbn = expand.grid(1:3,1:4)

#or `expand.grid(1:900,1:600)` in your case

flen = length(file.list)

lst 将占用 file.list

lapply(1:(nrow(cmbn)),function(t,lst,cmbn)
                      {return(sapply(1:flen,function(i,t1,lst1,cmbn1){
                              return(lst1[[i]][cmbn1$Var1[t1],cmbn1$Var2[t1]])},t,lst,cmbn))
                      },file.list,cmbn)