基本上,我会在同一个文件夹中读取和操作大约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"
基本上是一样的。怎么了?谢谢
1条答案
按热度按时间2ledvvac1#
sapply
返回最后一个表达式的结果,在本例中是df$ID
的赋值。这是一个字符串向量,而不是一个帧。在sapply
的末尾添加一个单独的df
,您将得到整个帧。要演示如何将 column 分配到帧中而不返回整个帧,请参见以下内容:
(This不管使用
<-
还是=
,R中的行为是相同的。)