conda activate SignalP
for i in /backup/liuli/geneomic/orthofinder/last/wai/*.fa; do
    file_name=$(basename "$i")
    output_dir="/backup/liuli/geneomic/orthofinder/last/wai/$file_name"
    signalp6 --fastafile "$i" --organism eukarya --output_dir "$output_dir" --format txt --mode fast
done

数据处理

file_list <- readLines("list.txt")
##循环读取
file_list <- list.files("D:/地衣/result/基因家族扩张收缩/signal/", full.names = TRUE)

for (file in file_list) {
  filename <- tools::file_path_sans_ext(basename(file))
  assign(filename, read.delim(file, header=FALSE, comment.char="#"))  # 假设文件有标题行
}
data <- ls(pattern = ".*_prediction_results$")
# 遍历数据框名称向量,依次处理每个数据框
for (df_name in data) {
  
  # 获取数据框
  df <- get(df_name)
  
  # 计算第二列 V2 的频率表并转换为数据框
  df_2 <- as.data.frame(table(df$V2))
  
  # 生成新数据框名称,例如 "df1_2"
  new_df_name <- paste0(df_name, "_2")
  
  # 将新数据框保存到全局环境中,使用 assign() 函数
  assign(new_df_name, df_2)
}

# 获取所有以 "_2" 结尾的数据框名
dfs_to_merge <- mget(ls(pattern = "_2$"))

# 在合并前修改列名,给每个频数列加上数据框名称作为前缀
dfs_to_merge <- lapply(names(dfs_to_merge), function(df_name) {
  df <- dfs_to_merge[[df_name]]
  colnames(df)[2] <- paste0(df_name, "_Freq")  # 修改频数列的列名,添加数据框名字作为前缀
  return(df)
})

# 使用 Reduce 和 merge 进行合并
merged_df <- Reduce(function(x, y) merge(x, y, by = "Var1", all = TRUE), dfs_to_merge)

# 将 NA 替换为 0,防止列中有缺失值
merged_df[is.na(merged_df)] <- 0

# 查看合并后的数据框
print(merged_df)