小编Ian*_*des的帖子

Needleman-Wunsch算法动态规划实现中的回溯

我几乎让我的needleman-wunsch实现工作,但我对如何处理特定情况下的追溯感到困惑.

我们的想法是,为了重新构建序列(最长路径),我们重新计算以确定得分来自的矩阵.我遇到问题的边缘情况是右下方得分不在匹配矩阵中,但是在插入列矩阵中(意味着得到的跟踪序列应该有插入).

这些序列以a2m格式记录,其中序列中的插入被记录为小写字符.所以在最终输出中ZZ,AAAC应该是对齐AAac.当我用手追溯时,我最终会AAAc因为我只访问Ic矩阵一次.是我的白板图片.如你所见,我有三个黑色箭头和一个绿色箭头,这就是我追溯给我的原因AAAc.我应该计算第一个单元格,然后停在1,1位置?我不确定如何改变我实现这一点的方式.

注意,这里使用的替换矩阵是BLOSUM62.复发关系是

M(i,j) = max(Ic(i-1,j-1)+subst, M(i-1,j-1)+subst, Ir(i-1,j-1)+subst)
Ic(i,j) = max(Ic(i,j-1)-extend, M(i,j-1)-open, Ir(i,j-1)-double)
Ir(i,j) = max(Ic(i-1,j)-double, M(i-1,j)-open, Ir(i-1,j)-extend)
Run Code Online (Sandbox Code Playgroud)

编辑:这是traceback_col_seq函数重写为更清洁.请注意,score_cell现在返回thisM,thisC,thisR而不是其中的最大值.这个版本将对齐评为AaAc,仍然存在同样的问题,现在又出现了另一个问题,即为什么它会在1,2处再次进入Ic.但是这个版本更清晰.

def traceback_col_seq(self):
    i, j = self.maxI-1, self.maxJ-1
    self.traceback = list()
    matrixDict = {0:'M',1:'Ic',2:'Ir',3:'M',4:'Ic',5:'Ir',6:'M',7:'Ic',8:'Ir'}
    while i > 0 or j > 0:
        chars = self.col_seq[j-1] + self.row_seq[i-1]
        thisM, thisC, thisR = self.score_cell(i, j, chars)
        cell = thisM + thisC + thisR
        prevMatrix = matrixDict[cell.index(max(cell))]
        print(cell, prevMatrix,i,j)
        if prevMatrix == …
Run Code Online (Sandbox Code Playgroud)

python algorithm bioinformatics dynamic-programming

13
推荐指数
1
解决办法
6173
查看次数

'x'和'w'必须具有相同的长度 - weighted.mean.default中的错误

glmnet在使用R中的包有问题.我正在尝试使用它现成的,并且遇到以下问题:

test <- glmnet(seq.trans,rsem.trans)
Run Code Online (Sandbox Code Playgroud)

weighted.mean.default(y,weights)中的错误:'x'和'w'必须具有相同的长度

但输入大小相同:

dim(seq.trans)
# [1]    28 17763
dim(rsem.trans)
# [1]    28 17763
Run Code Online (Sandbox Code Playgroud)

导致此错误的原因是什么?

r glmnet

13
推荐指数
1
解决办法
9451
查看次数

R无法启动设备PNG - 功能()对于PNG是否为TRUE?

我正在更广泛的管道中使用R脚本,似乎不适用于某些版本的Rscript但与其他版本一起使用.由于无法连接到X11,调用失败,这是可以理解的,因为这是在服务器上.但我在本地安装Rscript能够处理这个问题吗?

我的本地安装是版本3.0.1,而报告此问题的其他用户的版本是3.0.2.

这是一个简单的测试用例 - 首先是.R文件:

#!/usr/bin/env Rscript

capabilities()

png("abc")

dev.off()
Run Code Online (Sandbox Code Playgroud)

用我的本地环境运行:

-bash-4.1$ ./test.R
    jpeg      png     tiff    tcltk      X11     aqua http/ftp  sockets 
    TRUE     TRUE     TRUE     TRUE    FALSE    FALSE     TRUE     TRUE 
  libxml     fifo   cledit    iconv      NLS  profmem    cairo 
    TRUE     TRUE    FALSE     TRUE     TRUE    FALSE     TRUE 
null device 
          1 
Run Code Online (Sandbox Code Playgroud)

运行Rscript的安装其他人正在尝试使用:

    jpeg      png     tiff    tcltk      X11     aqua http/ftp  sockets 
    TRUE     TRUE    FALSE     TRUE    FALSE    FALSE     TRUE     TRUE 
  libxml     fifo   cledit    iconv      NLS  profmem    cairo 
    TRUE     TRUE    FALSE     TRUE     TRUE    FALSE     TRUE 
Error in .External2(C_X11, …
Run Code Online (Sandbox Code Playgroud)

r

12
推荐指数
2
解决办法
2万
查看次数

将R列表(矩阵)的每个成员相互相乘

我在R中有一个相同大小的矩阵列表,我希望彼此相乘.

我正在寻找一种方法:

list$A * list$B * list$C * ...
Run Code Online (Sandbox Code Playgroud)

无需手动输入(我的列表有几十个矩阵).

r

10
推荐指数
1
解决办法
1628
查看次数

将从 xargs 传递给 bash 的参数保存为用于处理的变量

我正在尝试并行运行许多命令,并且需要先对输入进行一些字符串操作。我怎样才能让下面的例子工作?

find . -mindepth 1 -type d | xargs -n 1 -P 20 -i sh -c "v={}; echo $v"
Run Code Online (Sandbox Code Playgroud)

当我使用它时,$v为空。为什么它没有被保存为的值{}

bash xargs

6
推荐指数
1
解决办法
1万
查看次数

使用 groupby/aggregate 返回多列

我有一个示例数据集,我想按一列对其进行分组,然后根据现有列的所有值生成 4 个新列。

以下是一些示例数据:

data = {'AlignmentId': {0: u'ENSMUST00000000001.4-1',
  1: u'ENSMUST00000000001.4-1',
  2: u'ENSMUST00000000003.13-0',
  3: u'ENSMUST00000000003.13-0',
  4: u'ENSMUST00000000003.13-0'},
 'name': {0: u'NonCodingDeletion',
  1: u'NonCodingInsertion',
  2: u'CodingDeletion',
  3: u'CodingInsertion',
  4: u'NonCodingDeletion'},
 'value_CDS': {0: nan, 1: nan, 2: 1.0, 3: 1.0, 4: nan},
 'value_mRNA': {0: 21.0, 1: 26.0, 2: 1.0, 3: 1.0, 4: 2.0}}
df = pd.DataFrame.from_dict(data)
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

               AlignmentId                name  value_mRNA  value_CDS
0   ENSMUST00000000001.4-1   NonCodingDeletion        21.0        NaN
1   ENSMUST00000000001.4-1  NonCodingInsertion        26.0        NaN
2  ENSMUST00000000003.13-0      CodingDeletion         1.0        1.0
3  ENSMUST00000000003.13-0     CodingInsertion         1.0        1.0
4  ENSMUST00000000003.13-0 …
Run Code Online (Sandbox Code Playgroud)

python pandas

6
推荐指数
1
解决办法
6574
查看次数

使用Python正则表达式拆分非重叠字符组(ORF发现)

我正在寻找一种漂亮的pythonic方法来找到DNA序列中的开放阅读框架.我发现许多在线实现使用索引,标志和其他这样的丑陋.

我很确定可以创建正则表达式实现,但我对正则表达式不好.一般的想法是我想通过'ATG','TAG','TGA'和'TAA'分割出一串DNA序列.但是我不想在重叠区域上分裂,例如序列'ATGA'应该分成'ATG','A'.基本上在三个框架中的每个框架中从左到右.

为清晰起见编辑:如评论中所述,尽管存在(在非零帧中),但ATGATTTTGA应该将一个序列拆分为ATG,TTTTGATGA

edit2:这就是我在没有正则表达式的情况下使用list comprehension splitting链接实现的方法.我讨厌使用旗帜.

def find_orf(seq):
    length = 0
    stop = ['TAA','TGA','TAG']
    for frame in range(3):
        orfFlag, thisLen = None, 0
        splitSeq = [seq[start+frame:start+frame+3] for start in range(0,len(seq),3)]
        for codon in splitSeq:
            if codon == 'ATG':
                orfFlag = True
                thisLen += 1
            elif orfFlag and codon in stop:
                orfFlag = None
                if thisLen > length:
                    length = thisLen
            else:
                thisLen += 1
    return length
Run Code Online (Sandbox Code Playgroud)

python regex

5
推荐指数
1
解决办法
1073
查看次数

要选择哪个python re模块来翻译perl正则表达式

我有/VA=\d+:(\S+):ENSG/一个在if语句中使用的perl正则表达式

if ($info =~ /VA=\d+:(\S+):ENSG/){
    $gene =$1;
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚在python中复制这个的最佳方法是什么.现在我有

gene_re = re.compile(r'VA=\d+:(\S+):ENSG')
this_re = re.search(gene_re, info)
if this_re is not None:
    gene = info[this_re.start(0):this_re.end(0)]
Run Code Online (Sandbox Code Playgroud)

这是翻译它的好方法吗?我想这是perl实际上比python更具可读性的一个领域.

请注意,编译python正则表达式是因为接下来的三行实际上在循环内.

python perl

5
推荐指数
1
解决办法
93
查看次数

捏造类和函数之间的界限

我有一系列用于对数据进行分类的函数.每个函数都传递相同的输入.该系统的目标是能够随意放入新的分类功能,而无需进行任何调整.

为此,我使用了classes_in_module这里取消的功能.然后,将在每个输入上运行一个python文件中的每个分类器.

但是,我发现将分类器实现为类或函数是kludgy.类意味着实例化和执行,而函数缺乏干净的内省以允许我查询名称或使用继承来定义公共值.

这是一个例子.一,类实现:

class AbstractClassifier(object):
    @property
    def name(self):
        return self.__class__.__name__

class ClassifierA(AbstractClassifier):
    def __init__(self, data):
        self.data = data
    def run(self):
        return 1
Run Code Online (Sandbox Code Playgroud)

然后可以以这种方式使用它,假设它classifier_listclasses_in_module包含ClassifierA在其他文件中的文件的输出:

result = []
for classifier in classifier_list:
    c = classifier(data)
    result.append(c.run())
Run Code Online (Sandbox Code Playgroud)

然而,这似乎有点傻.这个类显然是静态的,并不需要维护自己的状态,因为它被使用一次并被丢弃.分类器实际上是一个函数,但是我失去了拥有共享name属性的能力- 我将不得不使用丑陋的内省技术sys._getframe().f_code.co_name并为每个分类器函数复制该代码.分类器之间的任何其他共享属性也将丢失.

你怎么看?我应该接受这种错误使用课程吗?或者,还有更好的方法?

python

5
推荐指数
1
解决办法
81
查看次数

如何让 clap 来包装长帮助消息?

这是一个例子:

extern crate clap;
use clap::{Arg, App};

fn main() {
let args = App::new("test")
    .arg(Arg::with_name("scoring_method")
            .short("s")
            .long("scoring-method")
            .help("Very very very very very very long long long long long help help help help help message message message message message message message"))
    .get_matches();
}
Run Code Online (Sandbox Code Playgroud)

导致帮助文本格式如下:

控制台示例

(在代码模式下粘贴会导致 Stack Overflow 修复格式问题)

生成的确切字符串是:

extern crate clap;
use clap::{Arg, App};

fn main() {
let args = App::new("test")
    .arg(Arg::with_name("scoring_method")
            .short("s")
            .long("scoring-method")
            .help("Very very very very very very long long long long long help help help help help …
Run Code Online (Sandbox Code Playgroud)

rust

5
推荐指数
2
解决办法
1287
查看次数