R语言 在循环中阅读.tsv文件会获得具有相同文件和不同名称的文件列表

qvk1mo1f  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(195)

基本上,我会在同一个文件夹中读取和操作大约80个tsv文件。我不明白为什么当我尝试使用lapply或sapply时,它会读取所有的.tsv文件,但列表中的文件是相同的(相同的行数等),但每个文件的名称是不同的。这就像它阅读列表中相同的第一个文件的80倍。

files <- list.files(path="/my/path/tracks")

head(files)
[1] "ENCFF029UVS forebrain tissue embryo (16.5 days).tsv" "ENCFF042VCB forebrain tissue embryo (11.5 days).tsv"
[3] "ENCFF080PBH forebrain tissue embryo (15.5 days).tsv" "ENCFF081SJ Llimb tissue embryo (15.5 days).tsv"     
[5] "ENCFF110ZFH heart tissue embryo (16.5 days).tsv"     "ENCFF126VCW midbrain tissue embryo (10.5 days).tsv" 

try= sapply(files, simplify=FALSE, function(i){    
  message("reading file", i, "..." )
  df= read_tsv(file = i, )
 
  df= df[grep("ENSMUS*", df$gene_id),]
  
  df$ID=gsub("\\..*","", df$gene_id)   
})

我得到这样的结果:

> head(try$`ENCFF029UVS forebrain tissue embryo (16.5 days).tsv`)
[1] "ENSMUSG00000000001" "ENSMUSG00000000003" "ENSMUSG00000000028" "ENSMUSG00000000031" "ENSMUSG00000000037" "ENSMUSG00000000049"
> head(try$`ENCFF042VCB forebrain tissue embryo (11.5 days).tsv`)
[1] "ENSMUSG00000000001" "ENSMUSG00000000003" "ENSMUSG00000000028" "ENSMUSG00000000031" "ENSMUSG00000000037" "ENSMUSG00000000049"
>head(try$`ENCFF126VCW midbrain tissue embryo (10.5 days).tsv`)
[1] "ENSMUSG00000000001" "ENSMUSG00000000003" "ENSMUSG00000000028" "ENSMUSG00000000031" "ENSMUSG00000000037" "ENSMUSG00000000049"

基本上是一样的。怎么了?谢谢

2ledvvac

2ledvvac1#

sapply返回最后一个表达式的结果,在本例中是df$ID的赋值。这是一个字符串向量,而不是一个帧。在sapply的末尾添加一个单独的df,您将得到整个帧。

try= sapply(files, simplify=FALSE, function(i){    
  message("reading file", i, "..." )
  df= read_tsv(file = i, )
  df= df[grep("ENSMUS*", df$gene_id),]
  df$ID=gsub("\\..*","", df$gene_id)   
  df                                     # ADD THIS
})

要演示如何将 column 分配到帧中而不返回整个帧,请参见以下内容:

df <- data.frame(a=1:3)
ret <- (df$id <- letters[1:3])
ret
# [1] "a" "b" "c"

(This不管使用<-还是=,R中的行为是相同的。)

相关问题