我有点坚持使用这段代码...目的是只从文件夹中读取文本文件,文件几乎不同,为每个文件取一列,并为每个提取的列创建一个数据框( cbind.fill
是一个手工制作的函数,它添加一个新列并使用NA值填充"空的#34;空格。这是代码:
setwd("...folderOfInterest/")
genes_data <- data.frame()
for(i in list.files(pattern = "^GO_.*txt", full.names = TRUE)){
print(i) #this works perfectly, it only prints desired files...
q <- read.table(i, header = TRUE, sep = "\t", quote = NULL)
genes_data <- cbind.fill(genes_data, q[,2])
}
正如@Adam B建议的那样,这里是print(i)
输出和文件夹(folder_screenshot)的屏幕截图:
[1] "./GO_ALPHA_AMINO_ACID_CATABOLIC_PROCESS.xls"
[1] "./GO_ALPHA_AMINO_ACID_METABOLIC_PROCESS.xls"
[1] "./GO_ALPHA_BETA_T_CELL_ACTIVATION.xls"
[1] "./GO_AMINO_ACID_BETAINE_METABOLIC_PROCESS.xls"
[1] "./GO_AMINO_ACID_IMPORT.xls"
[1] "./GO_AMINO_ACID_TRANSMEMBRANE_TRANSPORT.xls"
[1] "./GO_AMINO_ACID_TRANSPORT.xls"
[1] "./GO_AMINOGLYCAN_BIOSYNTHETIC_PROCESS.xls"
[1] "./GO_ANGIOGENESIS.xls"
[1] "./GO_ANION_TRANSPORT.xls"
[1] "./GO_ANTIGEN_PROCESSING_AND_PRESENTATION.xls"
[1] "./GO_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_ENDOGENOUS_ANTIGEN.xls"
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file './GO_ANTIGEN_PROCESSING_AND_PRESENTATION_OF_ENDOGENOUS_ANTIGEN.xls': No such file or directory
(注意:文件&#39;扩展名为.xls,但实际上它们是.txt文件)
它预示着这条消息:
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file './GO_ANTIGEN_PROCESSING_AND_PRESENTATION.txt': No such file or directory
同样仅运行q <- read.table(i, header = TRUE, sep = "\t", quote = NULL)
会出现此错误消息。
我认为我在正确的文件夹中(因为print(i)
效果很好),我还更改了full.names
选项并将list.files
设置为变量循环...但nothins似乎工作。如果有人有任何想法,请随时欢迎!
答案 0 :(得分:0)
我已经在随机生成的文件上尝试了它并且它有效。您可能不需要使用数据cd进入目录,只需将list.files
dir
参数与数据目录的路径一起提供即可。
GOfls <- list.files("indata", pattern = "^GO_.*\\.txt", full.names = TRUE)
head(GOfls)
[1] "indata/GO_amswylfbgp.txt" "indata/GO_amswylfbgptxt" "indata/GO_apqqqktvir.txt"
[4] "indata/GO_arwudmbzsr.txt" "indata/GO_autljyljgn.txt" "indata/GO_beeqcmnayk.txt"
# lapply -> do.call for reading and binding the data is better approach
gene_data <- do.call('cbind', lapply(GOfls, function(path) read.delim(path)[,2]))
# have a look at the data
dim(gene_data)
[1] 100 100
我试图以这种方式重现你的问题(它的可选文本):
dir.create("indata")
fls <- lapply(1:100, function(i) data.frame(matrix(rnorm(1000), ncol = 10)))
names(fls) <- replicate(100, paste0("./indata/", "GO_",
paste0(sample(letters, 10, replace = T),
collapse = ""), ".txt"
)
)
lapply(names(fls), function(x) write.table(fls[[x]], x, quote = F, sep = "\t"))
head(dir("indata"))
[1] "GO_acebruujkw.pdf" "GO_amswylfbgp.txt" "GO_amswylfbgptxt" "GO_apqqqktvir.txt"
[5] "GO_arwudmbzsr.txt" "GO_autljyljgn.txt"
# I have added some renamed .txt files (.pdf, .tiff, .gel) to the indata
rm(list = ls())
答案 1 :(得分:0)
那已经解决了!这有点奇怪,但将感兴趣的文件夹复制到桌面上,代码似乎再次起作用。
一个配偶和我看到硬盘的活动崩溃了,所以我们认为在阅读过程中可能会出现问题......所以复制文件夹就是(简单)解决方案!
然而,如果有人有解释这种奇怪情况的想法,我相信它会有用!非常感谢!
修改
我已经完成了一些测试,也许问题是文件夹路径的名称,它太长并且会导致循环崩溃。
答案 2 :(得分:-1)
我认为这是因为您正在搜索.xls文件,但之后尝试以.txt文件的形式打开它
在excel中尝试将文件保存为逗号或制表符分隔的文本文件。
如果你想直接打开excel文件,他们有一些可以做到这一点的软件包。试试readxl。