使用R生成fasta后执行makeblastdb提示文件不存在的解决咨询
问题分析与代码修改建议
终端提示homo_ref.faa不存在,核心原因是你的R代码存在运行错误,导致文件未成功生成。以下是具体问题和修改方案:
代码中的关键错误
- 未定义变量
merged_3:最后一行write.fasta调用了names(merged_3),但代码全程未创建merged_3对象,会直接触发R运行错误,终止流程,文件无法生成。 write.fasta参数格式错误:seqinr包的write.fasta要求sequences传入序列的字符向量/列表,names传入对应序列的ID向量,你直接传入了整个data.frame,不符合函数要求。- 重复加载包:已加载
tidyverse(包含dplyr),无需再次调用library(dplyr)。
修改后的完整代码
library(seqinr) library(Biostrings) library(data.table) library(tidyverse) # 读取表格数据 homo_tab <- read.csv("proteins_homo.csv", header = TRUE, sep = ",") homo_tab_1 <- homo_tab[, c(7, 9:11)] colnames(homo_tab_1)[2] <- "ID" # 筛选每个Locus的最长序列 son <- homo_tab_1 %>% group_by(Locus) %>% slice_max(Length, n = 1) %>% slice_head(n = 1) # 读取蛋白质fasta并转换为数据表 human_prot <- read.fasta(file = "homo_s.faa", seqtype = "AA", as.string = TRUE, set.attributes = TRUE) human_prot <- unlist(human_prot) %>% as.data.frame() %>% setDT(keep.rownames = "ID") colnames(human_prot) <- c("ID", "seq") # 合并数据并清理 merged <- merge(human_prot, son, by = "ID", all.x = TRUE) merged_1 <- na.omit(merged) merged_2 <- subset(merged_1, select = -c(3,4,5)) # 生成fasta文件(修正核心参数) write.fasta( sequences = merged_2$seq, # 传入序列列的字符向量 names = merged_2$ID, # 传入ID列的字符向量 file.out = "homo_ref.faa" )
额外验证建议
- 运行R代码后,可通过
getwd()查看当前工作目录,确认homo_ref.faa是否生成。 - 终端执行
makeblastdb时,确保终端工作目录与R工作目录一致,或直接使用文件绝对路径(如makeblastdb -in /your/path/homo_ref.faa -dbtype prot)。
数据来源:NCBI人类基因组页面
内容的提问来源于stack exchange,提问作者pentro gen
相关产品推荐
相关产品推荐

