Вот вариант
charcenter <- function(input, char="X", pad=5) {
index <- regexpr("X", input, fixed=TRUE)
extr <- substr(input, pmax(0, index-pad), pmin(index+pad, nchar(input)))
padl <- strrep("x", pmax(pad-index+1, 0))
padr <- strrep("x", pmax(pad-nchar(input)+index, 0))
paste0(padl, extr, padr)
}
мы используем регулярное выражение, чтобы найти первый X, затем используем substr()
, чтобы извлечь как можно больше вокруг него, а затем выяснить, сколько заполнения требуется и каждую сторону и добавить это в.
Если я объединю его с вводом, вот результат
input <- c("KGDDQSXQGGAPDAGQE", "TEEDSEEVXEQK", "LTXTSGETTQTHTEPTGDSK", "IXTHNSEVEEDDMDK", "SXENPEEDEDQRNPAK", "XTAEHEAAQQDLQSK", "ATVIXHGETLRRTK", "XAVAREESGKPGAHVTVK", "YHTINGHNAEVXK", "XAAEDDEDDDVDTK")
cbind(charcenter(input), input)
# input
# [1,] "GDDQSXQGGAP" "KGDDQSXQGGAPDAGQE"
# [2,] "DSEEVXEQKxx" "TEEDSEEVXEQK"
# [3,] "xxxLTXTSGET" "LTXTSGETTQTHTEPTGDSK"
# [4,] "xxxxIXTHNSE" "IXTHNSEVEEDDMDK"
# [5,] "xxxxSXENPEE" "SXENPEEDEDQRNPAK"
# [6,] "xxxxxXTAEHE" "XTAEHEAAQQDLQSK"
# [7,] "xATVIXHGETL" "ATVIXHGETLRRTK"
# [8,] "xxxxxXAVARE" "XAVAREESGKPGAHVTVK"
# [9,] "HNAEVXKxxxx" "YHTINGHNAEVXK"
# [10,] "xxxxxXAAEDD" "XAAEDDEDDDVDTK"