Witam, posiadam kod napisany w R i chciałbym go przekształcić na kod w Pythonie. Niestety nie wiem za bardzo jak to zrobić, jestem osobą początkującą. Gdyby ktoś był w stanie pomóc mi, wytłumaczyć co zrobić po kolei i z jakich funkcji skorzystać, to byłbym wdzięczny.
Tutaj jest kod napisany w R:
foo <- function(x){
xSplit <- strsplit(x, "")
# indels
indels <- unique(
unlist(
lapply(xSplit, function(i){
ix <- which(i == "-")
g <- c(0, cumsum(diff(ix) > 1))
split(ix, g)
}), recursive = FALSE))
# sort by position
indels <- indels[order(sapply(indels, `[`, 1), lengths(indels))]
names(indels) <- paste0("indel_", seq(length(indels)))
# return binary
t(
sapply(xSplit, function(i){
sapply(indels, function(j){
!all(i[ j ] == "-")
})
}) * 1
)
}
# example data
x1 <- c("CATG----ACAGAGCGACCCGCG--CACGTTACAAACACTACGCGGGGTGGCCCCGG",
"CATGCCCGACAGAGCGACCCGCGAACACGTTACAAACACTACG---GGTGGCCCCGG")
x2 <- c("CATG----ACAGAGCGACCCGCG--CACGTTACAAACACTACGCGGGGTGGCCCCGG",
"CATGCCCGACAGAGCGACCCGCGAACACGTTACAAACACTACG---GGTGGCCCCGG",
"CATG----ACAGA---ACCCGCG--CACGTTACAAACACTACGCGGGGTGGCCCCGG")
Ten kod ma za zadanie zakodowanie indeli (przerw oznaczonych '-') w sposób binarny. Porównuje on np. te 3 sekwencje, które są w x2 i gdy jest przerwa oznacza to jako 0, a jeśli przerwy nie ma w tym miejscu daje 1. Następnie układa on to w kolejności. Tutaj podaje wynik tego kodu dla x2:
foo(x2)
# indel_1 indel_2 indel_3 indel_4
# [1,] 0 1 0 1
# [2,] 1 1 1 0
# [3,] 0 0 0 1