2023.06.07 R풀이 추가
| Problem
약 1000여 개의 염기를 가진 DNA를 역상보 서열로 출력하여라
| 데이터와 결과
- Sample datasets
AAAACCCGGT
- Sample output
ACCGGGTTTT
| Python
내풀이
complement = {'A':'T', 'T':'A', 'G':'C', 'C':'G'}
r_com = []
with open('rosalind_revc.txt', 'r') as f :
sequence = f.readline().rstrip("\n") #dataset 파일의 마지막에 '\n' 이 있어서 실행오류가 남, 그것을 제거
for i in sequence[::-1] :
r_com.append(complement[i])
print(''.join(r_com)) # list to string
추천수 높은 풀이
st = "AAAACCCGGT"
st = st.replace('A', 't').replace('T', 'a').replace('C', 'g').replace('G', 'c').upper()[::-1]
print st
와우....... 진짜 현명하다
일부러 소문자로 바꿔서 혼동을 없애고 마지막에 대문자로 변환
| R
패키지 사용 버전
library(Biostrings)
seq <- "AAAACCCGGT"
rev <- DNAString(seq)
out <- reverseComplement(rev)
치트기 없이 python풀이와 비슷하게 한 버전
- Rbase에서는 dictionary가 없어서 추가적인 패키지를 사용해야 한다ㅠ 아니면 if문을 통해서 하나하나 바꿔야 한다.
library(dplyr)
library(stringr)
# 원본 서열
sequence <- "AAAACCCGGT"
sequence %>%
str_replace_all( "A", "t") %>%
str_replace_all( "C", "g") %>%
str_replace_all( "G", "c") %>%
str_replace_all( "T", "a") %>%
toupper %>%
strsplit("") %>%
unlist %>%
rev %>%
paste(collapse = "")
ChatGPT가 준 코드 : "R기본 함수만 사용해 줘"
complement <- function(base) {
if (base == "A") {
return("T")
} else if (base == "T") {
return("A")
} else if (base == "C") {
return("G")
} else if (base == "G") {
return("C")
} else {
return(base)
}
}
# 역상보 서열 생성
reverse_complement <- function(sequence) {
reverse_seq <- rev(strsplit(sequence, "")[[1]])
complement_seq <- sapply(reverse_seq, complement)
return(paste(complement_seq, collapse = ""))
}
# 역상보 서열 출력
reverse_complement(sequence)
반응형