Я использую Rstudio 0.99.489 и R-3.2.3 в Windows 7

Как я могу избежать печати V1 и N внизу данных?

options(datatable.print.nrows = Inf)
dt <- data.table(sample.int(2e3, 1e4, T))
print(dt[ , .(.N), V1])

...
1980:  419  1
1981:  898  2
1982: 1260  1
        V1  N
4
Oleg Bondar 29 Дек 2015 в 15:52

2 ответа

Лучший ответ

Вы можете управлять печатью объекта как обычным вектором символов.

library(data.table)
options(datatable.print.nrows = Inf)
dt = data.table(sample.int(2e3, 1e4, T))
myprint = function(x){
    prnt = capture.output(print(x))
    cat(prnt[-length(prnt)], sep="\n")
}
myprint(dt[ , .(.N), V1])
5
jangorecki 29 Дек 2015 в 12:59

Вот альтернатива для рассмотрения. Поскольку data.table s являются расширенными data.frame s, почему бы просто не использовать метод print для data.frame s? Таким образом, вы оба печатаете все строки входных данных, но имена столбцов также не отображаются внизу.

Например, следующего набора данных достаточно, чтобы продемонстрировать поведение печати имен внизу.

set.seed(1)
dt <- data.table(sample(21, 1000, TRUE)) ## Sufficient to demonstrate behavior
dt[, .N, by = V1]                        ## Shows the names at the bottom

Вы можете вручную указать метод print.data.frame, например:

print.data.frame(dt[, .N, by = V1])      ## Specify use of data.frame print method

Или, поскольку вы не печатаете что-то, что влияет на исходный data.table, вы также можете сделать что-то вроде этого:

setDF(dt[, .N, by = V1])[]                ## dt stays a `data.table`
2
A5C1D2H2I1M1N2O1R2T1 30 Дек 2015 в 16:03