Следующие две функции выполняют то, о чем спрашивают вопрос и последующее действие комментарий .Функции имеют аргумент, позволяющий передавать размеры результирующего информационного кадра в splitList
, по умолчанию n = 6
.
splitList <- function(DF, n = 6){
f <- seq(1, nrow(DF), n)
result_list <- lapply(f, function(j) lapply(f, function(i) DF[i:(i + n - 1), j:(j + n - 1)]))
unlist(result_list, recursive = FALSE)
}
combineList <- function(X, n = 6){
L <- length(X)
M <- sqrt(L)
f <- seq(1, L, M)
tmp <- lapply(f, function(i){
inx <- i:(i + M - 1)
do.call(rbind, X[inx])
})
do.call(cbind, tmp)
}
mylist <- splitList(df)
d2 <- combineList(mylist)
identical(df, d2)
#[1] TRUE
Окончательная очистка.
rm(d2)