유전 정보가 포함 된 데이터 세트가 있습니다.R에서 대괄호 {}를 사용하여 문자열의 여러 문자를 둘러싸는 방법은 무엇입니까?
structure(list(GenBank.Accession.version = structure(1:2, .Label = c("JH739893",
"JH751134"), class = "factor"), set = c(17L, 116L), snp.po.200.low = c(5480045,
-102), snp.po.200.up = c(5480464, 340), SNP.position = list(c(5480245L,
5480263L), c(98L, 139L)), seq2 = c("TTACATGGCAAGCACTCAATCTGGCTGCAGGGTGTCTGGCCACATACAAAACAAATGCCAAGTCACCTCTTGTCCCAAGGATCAAGACAAATTTGGACAACAAACCACACTGGCAGCCCCCTAGAAGCTTTCAGATATTTTAATGCCATTGAGATGTAGCATCCAGTGTAGACATTATTAGAAGCACAGCAGTTGCACTCGCACCTCCAGGGTGTCCAACATATGCTGGATTCTGGCATTGCTCATGGCAAGTGAGTTGGTGAATTCACAACTAGCCAGGTCATGTCTTCATTGCAGCAGAAAACTCATCAGCATGTCAGGATGAGAAAAGTCAATACAAAGGAAATGTGGGGATGGGATGGGATGGGATGGGATGGGATGGGATGGGATGGGATGGGATGGGATGGGATAGGGGGGTAA",
"AAAAAAAAAAAAAGAAAAGGGAATTTAAGGAGTCCCAGAGACAGGAGAATTCAGGACAATTTGCACCAATCACTTGCTCCTGGAAAGGAAGGTTGGGCTGATTTGGGGTTGGTAAGCACAGACCTTTCATCCGTTCGTAGAAAGAAGGAAAATTAAATCTCATGGCCTGTTTGTGAAAGGAAATTGCCCAGAATAGCTCTGACAGAATAAGCTATTCCACAATAGCTCCCCATGCGGACACTCCAGCCACTTTGTTCCAGGCTAATTAGTGTGCTTCCAAGCGCAGTAATTATCCTGGAAGGGAAATCTCTCCTCTCCCACAAAGAGTGTTTGCATGGAG"
), seq.length = c(16983252L, 753L), pos.list = list(5480045:5480464,
1:340), SNP.pos.in.subset = list(c(201L, 219L), c(98L, 139L
))), .Names = c("GenBank.Accession.version", "set", "snp.po.200.low",
"snp.po.200.up", "SNP.position", "seq2", "seq.length", "pos.list",
"SNP.pos.in.subset"), row.names = c(17L, 116L), class = "data.frame")
이 데이터는 다음과 같습니다
당신이 볼 수 있듯이, 처음에, 나는 유전 순서 (문자 순서)이 2 선이 내가 원하는 수정할 수 있습니다. 이 문자열은 더 긴 DNA 시퀀스 (첫 번째 시퀀스의 원래 길이는 16983252)에서 서브 세트되었습니다.
SNP.position은 원래 문자열에있는 문자의 위치를 알려줍니다. SNP.pos.in.subset는 나에게 동일한 위치를 제공하지만 부분 집합 내에서만 제공됩니다 (마치 하위 집합에서 1부터 시작하는 경우와 같습니다). 따라서 첫 번째 시퀀스의 경우 : 5480045와 5480464는 부분 집합 시퀀스에서 201 ad 219를 나타냅니다.
이 위치에있는 문자를 쉽게 찾으려면 위치 201과 219 주위에 중괄호를 넣으 려합니다.
이 작업을 수행하는 스크립트를 만들었습니다.
add.target.snp = function(sequences,
pos.start = 200,
pos.end.added = 3,
character.start = "{/",
character.end = "}") {
old = as.character(sequences)
for(i in 1:length(old)){
up.else = SNP.position[i]+pos.end.added
old[i] = gsub(paste0('^(.{',pos.start,'})(.*)$'), paste0('\\1',character.start,'\\2'), old[i])
old[i] = gsub(paste0('^(.{',up.else, '})(.*)$'), paste0('\\1',character.end,'\\2'), old[i])
}
return(old)
}
output.target = add.target.snp(sequences = df$seq2,
pos.start = df$SNP.pos.in.subset,
pos.end.added = 3,
character.start = "{/",
character.end = "}")
그러나이 스크립트는 나에게이 오류 반환 :
Error in gsub(paste0("^(.{", pos.start, "})(.*)$"), paste0("\\1", character.start, :
invalid regular expression '^(.{c(201, 219)})(.*)$', reason 'Invalid contents of {}' In addition: Warning message:
In gsub(paste0("^(.{", pos.start, "})(.*)$"), paste0("\\1", character.start, :
argument 'pattern' has length > 1 and only the first element will be used
내가 내 스크립트를 실행할 수있는 방법이 있나요,하지만 함께 둘러싸는 여러 값을 포함하는 "{/ my_value_at_position_201}"및 "{/ my_value_at_position_219 } "?
(I 보여 데이터의 두 번째 라인에 대한) 최종 결과는해야
AAAAAAAAAAAAAGAAAAGGGAATTTAAGGAGTCCCAGAGACAGGAGAATTCAGGACAATTTGCACCAATCACTTGCTCCTGGAAAGGAAGGTTGGGC{/T}GATTTGGGGTTGGTAAGCACAGACCTTTCATCCGTTCGTA{/G}AAAGAAGGAAAATTAAATCTCATGGCCTGTTTGTGAAAGGAAATTGCCCAGAATAGCTCTGACAGAATAAGCTATTCCACAATAGCTCCCCATGCGGACACTCCAGCCACTTTGTTCCAGGCTAATTAGTGTGCTTCCAAGCGCAGTAATTATCCTGG
내 스크립트로 다른 문제는 내가 내 경우에는 (내 벡터의 3 문자를 일부 문자를 추가하는 경우 : "{/}"), 두 번째 숫자 (201, 219 + 3)의 위치를 바꿀 것입니다. 숫자가 변경되지 않도록 대괄호를 한 번에 추가하는 방법이 있습니까?
'a {/ b} cde {/ f} '' – zx8754
내 경우는 다음과 비슷하게 보입니다. 첫 번째 문자열에 대한 출력이있는'add_bits (tmp, c (2,6), 3) 'add_bits (tmp, list (c (2,5), 3), 3)'. 이 문제를 해결할 방법이 있습니까? 'add_bits (tmp, unlist (list (c (2,5), 3)), 3)'시도했지만 작동하지 않습니다. SNP 위치와 서열의 연관성을 깨뜨립니다. 나는 또한 함수 안에 "unlist"를 넣으려고했으나, 아무 것도 작동하지 않았다. ... –
문자열 당 여러 개의 요소에 여분의 문자가 있기를 원한다. – dash2