regmatches
как еще одна альтернатива:
a <- "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
fn <- ","
rp <- "\n"
n <- 4
regmatches(a, gregexpr(fn, a)) <- list(c(rep(fn,n-1),rp))
a
#[1] "1, 2, 3, 4\n 5, 6, 7, 8\n 9, 10"
Как функция:
a <- "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
replN <- function(x, fn, rp, n) {
regmatches(x, gregexpr(fn, x)) <- list(c(rep(fn,n-1),rp))
x
}
replN(a, ",", "\n", 4)
#[1] "1, 2, 3, 4\n 5, 6, 7, 8\n 9, 10
Вы можете даже расширить это, чтобы векторизовать аргумент замены:
a = "1, 2, 3, 4, 5, 6, 7, 8, 9, 10"
replN <- function(x,fn,rp,n) {
sel <- rep(fn, n*length(rp))
sel[seq_along(rp)*n] <- rp
regmatches(x, gregexpr(fn, x)) <- list(sel)
x
}
replN(a, fn=",", rp=c("1st","2nd"), n=4)
#[1] "1, 2, 3, 41st 5, 6, 7, 82nd 9, 10"