利用motifStack将homer结果可视化#2#更新-已解决

#为了解决pcm的格式问题,我看了motifStack的原文档,但是没找到。如果有大佬知道,还请告知,小弟给你跪一个。

#于是想到是否可以将我们前面设置的矩阵文件导出成pcm呢?开始尝试!

直接上干货:

# 加载必要的库
library(tools)
library(motifStack)
library(ggplot2)
# 读取 .motif 文件的函数
read_motif_file <- function(filepath) {
  lines <- readLines(filepath)
  
  # 获取motif名称
  motif_name <- sub("^>", "", lines[1])
  
  # 读取数据部分
  data_lines <- lines[-1]
  pfm_data <- do.call(rbind, lapply(data_lines, function(line) {
    as.numeric(unlist(strsplit(line, "\\s+")))
  }))
  
  # 转置矩阵
  pfm_data <- t(pfm_data)
  
  list(name = motif_name, pfm = pfm_data)
}

# 将motif数据写到 .pcm 文件的函数
write_pcm_file <- function(motif, output_filepath) {
  connection <- file(output_filepath, "w")
  
  # 写入motif名称
  writeLines(paste(">", motif$name, sep=""), connection)
  
  # 读取数据并逐列写入
  pfm <- motif$pfm
  bases <- c("A", "C", "G", "T")
  
  for (i in 1:nrow(pfm)) {
    line <- paste(bases[i], paste(pfm[i, ], collapse = " "), sep = " ")
    writeLines(line, connection)
  }
  
  close(connection)
}

# 处理目录中的所有 .motif 文件的函数
process_motif_files <- function(directory) {
  # 获取所有的 .motif 文件
  files <- list.files(directory, pattern = "\\.motif$", full.names = TRUE)
  
  # 遍历每一个文件,并转换为 .pcm 文件
  for (file in files) {
    try({
      motif <- read_motif_file(file)
      pcm_file <- paste0(file_path_sans_ext(file), ".pcm")
      write_pcm_file(motif, pcm_file)
      message("Processed: ", basename(file), " -> ", basename(pcm_file))
    }, silent = TRUE)
  }
}

# 运行示例
target_directory <- "/Users/JHK/Desktop/"
process_motif_files(target_directory)

motifs<-importMatrix(dir(file.path("/Users/JHK/Desktop/"),"pcm$", full.names = TRUE))
motifStack(motifs, layout="stack", ncex=1.0)
# 建立进化树
motifStack(motifs, layout="tree")

用法:只需要替换你的文件路径就行,然后就是原始的文件中,就是>后面的内容,需要手动修改一下,因为最终呈现出来的单个logo名字是按照这个来的。

至于怎么美化,就按照喜好来就行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值