library(knitr) library(kableExtra) ellipse_table <- function(df, nr = 5, nc = 5, format = "latex") { nrows <- nrow(df) ncols <- ncol(df) # Ellipsis symbols depending on format if (format == "latex") { h_ellipsis <- "$\\dots$" # horizontal (for columns) v_ellipsis <- "$\\vdots$" # vertical (for rows) } else { h_ellipsis <- "..." v_ellipsis <- "..." } # Select top/bottom rows row_idx <- c( seq_len(ceiling(nr / 2)), nrows - floor(nr / 2) + 1:nr - nr ) row_idx <- unique(pmax(pmin(row_idx, nrows), 1)) # clamp # Select left/right cols col_idx <- c( seq_len(ceiling(nc / 2)), ncols - floor(nc / 2) + 1:nc - nc ) col_idx <- unique(pmax(pmin(col_idx, ncols), 1)) # Subset sub_df <- df[row_idx, col_idx, drop = FALSE] # Insert ellipsis row if needed if (nrows > nr) { ellipsis_row <- as.list(rep(h_ellipsis, length(col_idx))) sub_df <- rbind( sub_df[1:ceiling(nr / 2), , drop = FALSE], ellipsis_row, sub_df[(ceiling(nr / 2) + 1):nrow(sub_df), , drop = FALSE] ) rownames(sub_df)[ceiling(nr / 2) + 1] <- v_ellipsis } # Insert ellipsis col if needed if (ncols > nc) { ellipsis_col <- rep(v_ellipsis, nrow(sub_df)) sub_df <- cbind( sub_df[, 1:ceiling(nc / 2), drop = FALSE], "..." = ellipsis_col, sub_df[, (ceiling(nc / 2) + 1):ncol(sub_df), drop = FALSE] ) names(sub_df)[ceiling(nc / 2) + 1] <- h_ellipsis } # Print with kable return(sub_df) }