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

在R中结合GNU Parallel与Perl替换实现mhcflurry-predict并行任务

解决方案

核心思路

针对每个ciwdfile单独处理内容(逗号转空格),将处理后的等位基因串作为单个完整参数传递给mhcflurry-predict,同时通过GNU Parallel实现ciwdfiles与pepfiles的全组合并行执行。

具体实现步骤

  1. 确保GNU Parallel已安装(Mac下默认无,需通过Homebrew安装):
brew install parallel
  1. GNU Parallel命令(可直接在终端测试)
parallel '
  # 读取当前ciwdfile内容,将逗号替换为空格并保存到变量
  alleles=$(sed "s/,/ /g" {})
  # 执行预测,用双引号包裹$alleles避免参数被空格拆分
  mhcflurry-predict --alleles "$alleles" \
    --peptides-file {}2 \
    --out-file "{.}_{2/.txt/.predict.txt}"
' ::: C*.txt ::: pep*.txt
  • ::: C*.txt:指定所有ciwdfile作为第一个输入集合
  • ::: pep*.txt:指定所有pepfile作为第二个输入集合,Parallel会自动生成两个集合的全组合
  • {}:代表当前迭代的ciwdfile,{}2代表当前配对的pepfile
  • {.}:自动去掉ciwdfile的后缀名,{2/.txt/.predict.txt}:将pepfile的.txt后缀替换为.predict.txt,生成唯一输出文件名
  1. 嵌入到R的system()函数中
    由于R字符串需要转义双引号,需对命令中的双引号做转义处理:
system(
  command = 'parallel \'alleles=$(sed "s/,/ /g" {}); mhcflurry-predict --alleles "$alleles" --peptides-file {}2 --out-file "{.}_{2/.txt/.predict.txt}"\' ::: C*.txt ::: pep*.txt',
  wait = FALSE  # 设置为FALSE让R不等待并行任务完成,按需调整为TRUE
)

关键注意事项

  • 必须用双引号包裹$alleles:这是解决参数拆分问题的核心,确保替换后的空格不会被Shell解析为多个独立参数
  • Mac下的sed语法:默认使用BSD sed,s/,/ /g的写法完全兼容,无需额外调整
  • 输出文件名规则可根据实际需求修改,只要保证每个文件组合的输出不重复即可

内容的提问来源于stack exchange,提问作者Livia Tran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 04:10:30