You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:50:33