- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个DNA序列,我想在DNA序列读取列表中找到它的所有实例,或其任何可能的突变。我正在使用grepl来执行此操作,因为在我使用它的实例中,它比matchPattern快。我使用parLapply将我的突变载体喂入grepl函数。但是我感兴趣的是,提供了一种自动生成序列突变载体的简便方法。最初,我键入每个突变,但留给人为错误的余地,如果延长序列,则需要键入更多的突变。另外,我当前的代码仅允许1个突变,某些序列应允许比其他序列更多的突变。我不是在寻找有人为我编写循环,而只是给我建议考虑任何字符串。
现在,我有一种产生突变的半自动方法。现在,无需我全部输入即可生成载体,但仅适用于8个核苷酸长的序列。必须有一种更好的方法来为任何长度的任何核苷酸序列生成载体。
这是我的代码:
#My sequence of interest
seq1 <- "GGCGACTG"
lenseq1 <- nchar(seq1)
#A vector of the length of the sequence I wish to create all mutations of
mutsinseq1 <- rep(seq1, 5*lenseq1+4*(lenseq1-1)+1)
#The possible substitutions, insertions, and deletions to the sequence of interest
possnuc <- c("A","T","C","G","")
lenpossnuc <- length(possnuc)
#changing all elements of the vector except for the first
#the first 8 if statements are nucleotide substitutions or deletions
#the other if statements allow for inserts between nucleotides
for(i in 2:length(mutsinseq1)){
if(i<7){
mutsinseq1[i] <- paste(possnuc[i-1],substr(seq1,2,lenseq1),sep = "")
} else if(i<12){
mutsinseq1[i] <- paste(substr(seq1,1,1),possnuc[i-6],substr(seq1,3,lenseq1),sep = "")
} else if(i<17){
mutsinseq1[i] <- paste(substr(seq1,1,2),possnuc[i-11],substr(seq1,4,lenseq1),sep = "")
} else if(i<22){
mutsinseq1[i] <- paste(substr(seq1,1,3),possnuc[i-16],substr(seq1,5,lenseq1),sep = "")
} else if(i<27){
mutsinseq1[i] <- paste(substr(seq1,1,4),possnuc[i-21],substr(seq1,6,lenseq1),sep = "")
} else if(i<32){
mutsinseq1[i] <- paste(substr(seq1,1,5),possnuc[i-26],substr(seq1,7,lenseq1),sep = "")
} else if(i<37){
mutsinseq1[i] <- paste(substr(seq1,1,6),possnuc[i-31],substr(seq1,8,lenseq1),sep = "")
} else if(i<42){
mutsinseq1[i] <- paste(substr(seq1,1,7),possnuc[i-36],sep = "")
} else if(i<46){
mutsinseq1[i] <- paste(substr(seq1,1,1),possnuc[i-41],substr(seq1,2,lenseq1),sep = "")
} else if(i<50){
mutsinseq1[i] <- paste(substr(seq1,1,2),possnuc[i-45],substr(seq1,3,lenseq1),sep = "")
} else if(i<54){
mutsinseq1[i] <- paste(substr(seq1,1,3),possnuc[i-49],substr(seq1,4,lenseq1),sep = "")
} else if(i<58){
mutsinseq1[i] <- paste(substr(seq1,1,4),possnuc[i-53],substr(seq1,5,lenseq1),sep = "")
} else if(i<62){
mutsinseq1[i] <- paste(substr(seq1,1,5),possnuc[i-57],substr(seq1,6,lenseq1),sep = "")
} else if(i<66){
mutsinseq1[i] <- paste(substr(seq1,1,6),possnuc[i-61],substr(seq1,7,lenseq1),sep = "")
} else{
mutsinseq1[i] <- paste(substr(seq1,1,7),possnuc[i-65],substr(seq1,8,lenseq1),sep = "")
}
}
#getting rid of duplicate mutations
mutsinseq1 <- mutsinseq1[-which(duplicated(mutsinseq1))]
mutsinseq1
[1] "GGCGACTG" "AGCGACTG" "TGCGACTG" "CGCGACTG" "GCGACTG" "GACGACTG" "GTCGACTG" "GCCGACTG" "GGAGACTG" "GGTGACTG" "GGGGACTG" "GGGACTG" "GGCAACTG"
[14] "GGCTACTG" "GGCCACTG" "GGCACTG" "GGCGTCTG" "GGCGCCTG" "GGCGGCTG" "GGCGCTG" "GGCGAATG" "GGCGATTG" "GGCGAGTG" "GGCGATG" "GGCGACAG" "GGCGACCG"
[27] "GGCGACGG" "GGCGACG" "GGCGACTA" "GGCGACTT" "GGCGACTC" "GGCGACT" "GAGCGACTG" "GTGCGACTG" "GCGCGACTG" "GGGCGACTG" "GGACGACTG" "GGTCGACTG" "GGCCGACTG"
[40] "GGCAGACTG" "GGCTGACTG" "GGCGGACTG" "GGCGAACTG" "GGCGTACTG" "GGCGCACTG" "GGCGATCTG" "GGCGACCTG" "GGCGAGCTG" "GGCGACATG" "GGCGACTTG" "GGCGACGTG" "GGCGACTAG"
[53] "GGCGACTCG" "GGCGACTGG"
最佳答案
在其他语言中,您可能会使用一系列嵌套循环来执行此操作,但是在R中,有一些不错的组合函数。以下是执行所需功能的总体功能:
library(stringr)
library(purrr)
library(dplyr)
mutate_sequence <- function(string, num = 1, nucleotides = c("A","T","C","G","_")) {
l_str <- str_length(string)
choices <- cross(list(
cols = combn(seq_len(l_str), num, simplify = F),
muts = cross(rerun(num, nucleotides)) %>% map(unlist)
))
choice_matrix <-
map_dfr(choices, as_tibble, .id = "rows") %>%
mutate(rows = as.numeric(rows))
seq_matrix <- str_split(rep(string, max(choice_matrix$rows)), "", simplify = T)
seq_matrix[as.matrix(choice_matrix[,1:2])] <- str_to_lower(choice_matrix$muts)
apply(seq_matrix, 1, paste, collapse = "")
}
mutate_sequence("ATCG", num = 2)
[1] "aaCG" "aTaG" "aTCa" "AaaG" "AaCa" "ATaa" "taCG" "tTaG" "tTCa" "AtaG" "AtCa" "ATta" "caCG" "cTaG"
[15] "cTCa" "AcaG" "AcCa" "ATca" "gaCG" "gTaG" "gTCa" "AgaG" "AgCa" "ATga" "_aCG" "_TaG" "_TCa" "A_aG"
[29] "A_Ca" "AT_a" "atCG" "aTtG" "aTCt" "AatG" "AaCt" "ATat" "ttCG" "tTtG" "tTCt" "AttG" "AtCt" "ATtt"
[43] "ctCG" "cTtG" "cTCt" "ActG" "AcCt" "ATct" "gtCG" "gTtG" "gTCt" "AgtG" "AgCt" "ATgt" "_tCG" "_TtG"
[57] "_TCt" "A_tG" "A_Ct" "AT_t" "acCG" "aTcG" "aTCc" "AacG" "AaCc" "ATac" "tcCG" "tTcG" "tTCc" "AtcG"
[71] "AtCc" "ATtc" "ccCG" "cTcG" "cTCc" "AccG" "AcCc" "ATcc" "gcCG" "gTcG" "gTCc" "AgcG" "AgCc" "ATgc"
[85] "_cCG" "_TcG" "_TCc" "A_cG" "A_Cc" "AT_c" "agCG" "aTgG" "aTCg" "AagG" "AaCg" "ATag" "tgCG" "tTgG"
[99] "tTCg" "AtgG" "AtCg" "ATtg" "cgCG" "cTgG" "cTCg" "AcgG" "AcCg" "ATcg" "ggCG" "gTgG" "gTCg" "AggG"
[113] "AgCg" "ATgg" "_gCG" "_TgG" "_TCg" "A_gG" "A_Cg" "AT_g" "a_CG" "aT_G" "aTC_" "Aa_G" "AaC_" "ATa_"
[127] "t_CG" "tT_G" "tTC_" "At_G" "AtC_" "ATt_" "c_CG" "cT_G" "cTC_" "Ac_G" "AcC_" "ATc_" "g_CG" "gT_G"
[141] "gTC_" "Ag_G" "AgC_" "ATg_" "__CG" "_T_G" "_TC_" "A__G" "A_C_" "AT__"
l_str <- str_length(string)
combn(seq_len(l_str), num, simplify = F)
num
的突变数。
rerun(num, nucleotides)
num
次,并使其成为列表。
cross(rerun(num, nucleotides))
然后将列表中的每个组合作为列表提供,因此您正在使用核苷酸的所有可能组合,并带有重复序列。
cross(rerun(num, nucleotides)) %>% map(unlist)
将列表的最深层折叠为向量。
choices <- cross(list(
cols = combn(seq_len(l_str), num, simplify = F),
muts = cross(rerun(num, nucleotides)) %>% map(unlist)
))
[[1]]
[[1]]$`cols`
[1] 1 2
[[1]]$muts
[1] "A" "A"
[[2]]
[[2]]$`cols`
[1] 1 2
[[2]]$muts
[1] "T" "A"
...
cols
和
muts
将每个元素放入一个数据帧中,然后将它们全部绑定到一个单独的元素中,每个元素的标识符称为
rows
:
map_dfr(choices, as_tibble, .id = "rows")
# A tibble: 50 x 3
rows cols muts
<chr> <int> <chr>
1 1 1 A
2 1 2 A
3 2 1 T
4 2 2 A
5 3 1 C
6 3 2 A
7 4 1 G
8 4 2 A
9 5 1 _
10 5 2 A
# ... with 40 more rows
rows
是一个输出字符串,而
cols
告诉我们该字符串中的哪个位置将被替换。
muts
是将在这些位置使用的字符。为了稍后进行子设置,我们将使用
rows
将
mutate(...)
转换为数字。
seq_matrix <- str_split(rep(string, max(choice_matrix$rows)), "", simplify = T)
choice_matrix
告诉我们,我们将使用突变的序列,并重复多次。然后,我们采用该向量,并沿字符边界分割每个向量:
[,1] [,2] [,3] [,4]
[1,] "A" "T" "C" "G"
[2,] "A" "T" "C" "G"
[3,] "A" "T" "C" "G"
[4,] "A" "T" "C" "G"
[5,] "A" "T" "C" "G"
[6,] "A" "T" "C" "G"
...
seq_matrix[as.matrix(choice_matrix[,1:2])] <- str_to_lower(choice_matrix$muts)
rows
中的
cols
和
choice_matrix
标识每个位置。然后将
muts
中的适当值放入其中。您也可以在这里取出
str_to_lower
使其保持小写。您将更改默认参数
nucleotides
以使
"_"
成为
""
。
[,1] [,2] [,3] [,4]
[1,] "a" "a" "C" "G"
[2,] "a" "T" "a" "G"
[3,] "a" "T" "C" "a"
[4,] "A" "a" "a" "G"
[5,] "A" "a" "C" "a"
[6,] "A" "T" "a" "a"
...
apply
(即
1
中的
apply(..., 1, ...)
确实有一个功能,可以将每一行合并为一个字符串。那将是
paste(..., collapse = "")
。
choose(l_str, num) * length(nucleotides)^num
。
mutate_sequence <- function(string, num = 1, nucleotides = c("A","T","C","G","")) {
if (num < 1) {return(string)}
l_str <- str_length(string)
l_pos <- (num + 1)*(l_str - 1) + 1
choices <- cross(list(
cols = combn(seq_len(l_pos), num, simplify = F),
muts = cross(rerun(num, nucleotides)) %>% map(unlist)
))
choice_matrix <-
map_dfr(choices, as_data_frame, .id = "rows") %>%
mutate(rows = as.numeric(rows))
blanks <- character(l_pos)
orig_pos <- (seq_len(l_str) - 1) * (num+1) + 1
blanks[orig_pos] <- str_split(string, "", simplify = T)
seq_matrix <- matrix(
rep(blanks, max(choice_matrix$rows)),
ncol = l_pos, byrow = T
)
seq_matrix[as.matrix(choice_matrix[,1:2])] <- str_to_lower(choice_matrix$muts)
sequences <- apply(seq_matrix, 1, paste, collapse = "")
sequences[!duplicated(str_to_upper(sequences))]
}
l_pos <- (num + 1)*(l_str - 1) + 1
位置。
character(l_pos)
为您提供空白,然后在
(seq_len(l_str) - 1) * (num+1) + 1
处用原始核苷酸填充空白。
ATCG
变为
"A" "" "" "T" "" "" "C" "" "" "G"
。该功能的其余部分工作相同,只是将每个可能的核苷酸(或缺失)置于每个可能的位置。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] "a" "a" "" "T" "" "" "C" "" "" "G"
[2,] "a" "" "a" "T" "" "" "C" "" "" "G"
[3,] "a" "" "" "a" "" "" "C" "" "" "G"
[4,] "a" "" "" "T" "a" "" "C" "" "" "G"
[5,] "a" "" "" "T" "" "a" "C" "" "" "G"
...
paste
之后,我们可以使用
paste
检查重复项并将其排除。我们也可以摆脱小写字母的变异,而使用
duplicated
代替。现在输出比以前短得多,即278的前55个:
[1] "aaTCG" "aaCG" "aTaCG" "aTaG" "aTCaG" "aTCa" "AaaTCG" "AaaCG" "AaTaCG" "AaTaG" "AaTCaG"
[12] "AaTCa" "AaaG" "AaCaG" "AaCa" "ATaaCG" "ATaaG" "ATaCaG" "ATaCa" "ATaa" "ATCaaG" "ATCaa"
[23] "taTCG" "taCG" "tTaCG" "tTaG" "tTCaG" "tTCa" "AtaTCG" "AtTaCG" "AtTaG" "AtTCaG" "AtTCa"
[34] "ATta" "ATCtaG" "ATCta" "caTCG" "caCG" "cTaCG" "cTaG" "cTCaG" "cTCa" "AcaTCG" "AcaCG"
[45] "AcTaCG" "AcTaG" "AcTCaG" "AcTCa" "AcaG" "AcCaG" "AcCa" "ATcaCG" "ATcCaG" "ATcCa" "gaTCG"
...
关于r - 列出序列的所有突变(DNA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57226087/
我正在从 Stata 迁移到 R(plm 包),以便进行面板模型计量经济学。在 Stata 中,面板模型(例如随机效应)通常报告组内、组间和整体 R 平方。 I have found plm 随机效应
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
我想要求用户输入整数值列表。用户可以输入单个值或一组多个值,如 1 2 3(spcae 或逗号分隔)然后使用输入的数据进行进一步计算。 我正在使用下面的代码 EXP <- as.integer(rea
当 R 使用分类变量执行回归时,它实际上是虚拟编码。也就是说,省略了一个级别作为基础或引用,并且回归公式包括所有其他级别的虚拟变量。但是,R 选择了哪一个作为引用,以及我如何影响这个选择? 具有四个级
这个问题基本上是我之前问过的问题的延伸:How to only print (adjusted) R-squared of regression model? 我想建立一个线性回归模型来预测具有 15
我在一台安装了多个软件包的 Linux 计算机上安装了 R。现在我正在另一台 Linux 计算机上设置 R。从他们的存储库安装 R 很容易,但我将不得不使用 安装许多包 install.package
我正在阅读 Hadley 的高级 R 编程,当它讨论字符的内存大小时,它说: R has a global string pool. This means that each unique strin
我们可以将 Shiny 代码写在两个单独的文件中,"ui.R"和 "server.R" , 或者我们可以将两个模块写入一个文件 "app.R"并调用函数shinyApp() 这两种方法中的任何一种在性
我正在使用 R 通过 RGP 包进行遗传编程。环境创造了解决问题的功能。我想将这些函数保存在它们自己的 .R 源文件中。我这辈子都想不通怎么办。我尝试过的一种方法是: bf_str = print(b
假设我创建了一个函数“function.r”,在编辑该函数后我必须通过 source('function.r') 重新加载到我的全局环境中。无论如何,每次我进行编辑时,我是否可以避免将其重新加载到我的
例如,test.R 是一个单行文件: $ cat test.R # print('Hello, world!') 我们可以通过Rscript test.R 或R CMD BATCH test.R 来
我知道我可以使用 Rmd 来构建包插图,但想知道是否可以更具体地使用 R Notebooks 来制作包插图。如果是这样,我需要将 R Notebooks 编写为包小插图有什么不同吗?我正在使用最新版本
我正在考虑使用 R 包的共享库进行 R 的站点安装。 多台计算机将访问该库,以便每个人共享相同的设置。 问题是我注意到有时您无法更新包,因为另一个 R 实例正在锁定库。我不能要求每个人都关闭它的 R
我知道如何从命令行启动 R 并执行表达式(例如, R -e 'print("hello")' )或从文件中获取输入(例如, R -f filename.r )。但是,在这两种情况下,R 都会运行文件中
我正在尝试使我当前的项目可重现,因此我正在创建一个主文档(最终是一个 .rmd 文件),用于调用和执行其他几个文档。这样我自己和其他调查员只需要打开和运行一个文件。 当前设置分为三层:主文件、2 个读
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 5年前关闭。 Improve this qu
我的 R 包中有以下描述文件 Package: blah Title: What the Package Does (one line, title case) Version: 0.0.0.9000
有没有办法更有效地编写以下语句?accel 是一个数据框。 accel[[2]]<- accel[[2]]-weighted.mean(accel[[2]]) accel[[3]]<- accel[[
例如,在尝试安装 R 包时 curl作为 usethis 的依赖项: * installing *source* package ‘curl’ ... ** package ‘curl’ succes
我想将一些软件作为一个包共享,但我的一些脚本似乎并不能很自然地作为函数运行。例如,考虑以下代码块,其中“raw.df”是一个包含离散和连续类型变量的数据框。函数“count.unique”和“squa
我是一名优秀的程序员,十分优秀!