@@ -111,22 +111,22 @@ print.data.table = function(x, topn=getOption("datatable.print.topn"),
111111 expression = " <expr>" , ordered = " <ord>" )
112112 classes = classes1(x )
113113 col_names <- colnames(toprint )
114- classes <- sapply(col_names , function (col_name ) {
115- if (grepl(" ^index:" , col_name )) {
116- " index"
114+ index_cols <- paste0(" index:" , indices(x ))
115+ for (col_name in col_names ) {
116+ if (col_name %in% index_cols ) {
117+ classes [col_name ] <- " index"
117118 } else if (col_name %in% names(x )) {
118119 cls <- class(x [[col_name ]])
119- if (is.list(cls )) cls <- unlist(cls ) # Ensure it's a character vector
120- if (length(cls ) == 0 ) cls <- " unknown" # Handle empty cases
121- cls [1 ] # Take only the first class name
120+ if (is.list(cls )) cls <- unlist(cls )
121+ if (length(cls ) == 0 ) cls <- " unknown"
122+ classes [ col_name ] <- cls [1 ]
122123 } else {
123- " unknown"
124+ classes [ col_name ] <- " unknown"
124125 }
125- })
126- abbs = unname(class_abb [classes ])
127- abbs [classes == " index " ] <- " <index>"
126+ }
127+ abbs = unname(class_abb [classes [ col_names ] ])
128+ abbs [col_names %in% index_cols ] <- " <index>"
128129 if ( length(idx <- which(is.na(abbs ))) ) abbs [idx ] = paste0(" <" , classes [idx ], " >" )
129- stopifnot(length(abbs ) == ncol(toprint ))
130130 toprint = rbind(abbs , toprint )
131131 rownames(toprint )[1L ] = " "
132132 }
0 commit comments