如何改进R函数以按规则生成氨基酸序列的所有合法替换组合?
解决方案
首先定义精准的氨基酸替换映射表,每个氨基酸对应其所有合法的可选替换(包含自身,以保留原始字符串组合):
# 氨基酸替换规则映射表 aa_replace <- list( V = c("V", "L", "A"), L = c("L", "V", "A"), A = c("A", "V", "L"), S = c("S", "T"), T = c("T", "S"), C = c("C", "M"), M = c("M", "C") )
接着处理输入字符串,拆分字符、提取候选集合、生成所有合规组合并拼接:
string2 <- "VSC" # 拆分字符串为单个氨基酸字符 aa_chars <- strsplit(string2, "")[[1]] # 为每个字符匹配对应的候选替换集合 candidates <- lapply(aa_chars, function(x) aa_replace[[x]]) # 生成所有可能的组合 combinations <- expand.grid(candidates, stringsAsFactors = FALSE) # 将每行组合拼接为完整字符串 result <- apply(combinations, 1, paste0, collapse = "") # 输出结果 print(result)
运行后会得到完全符合规则的所有组合:"VSC" "LSC" "ASC" "VTC" "LTC" "ATC" "VSM" "LSM" "ASM" "VTM" "LTM" "ATM"
问题说明
之前的代码未针对每个位置的原始氨基酸做限制,将所有可替换氨基酸混在同一候选列表中,导致出现S替换为A/L/M这类不符合规则的情况。上述方案通过映射表为每个字符精准匹配合法候选,确保生成的组合完全遵循给定规则。
内容的提问来源于stack exchange,提问作者Ava Wilson
相关产品推荐
相关产品推荐

