【问题标题】:Possible to print more than 100 rows of a data.table?可以打印超过 100 行的 data.table?
【发布时间】:2012-08-23 03:52:39
【问题描述】:

data.table 有一个很好的特性,可以抑制输出到表的头部和尾部。

是否可以一次查看/打印超过 100 行?

library(data.table)
## Convert the ubiquitous "iris" data to a data.table
dtIris = as.data.table(iris)
## Printing 100 rows is possible
dtIris[1:100, ]
## Printing 101 rows is truncated
dtIris[1:101, ]

我经常有我只想查看的有点大(例如 200 行)的 data.table 结果。

【问题讨论】:

  • 因为我在其他任何地方都找不到这个:控制列宽(nchar / 字符数)的选项是options(datatable.prettyprint.char=5L)。这仅记录在(新闻)[github.com/Rdatatable/data.table/blob/…

标签: r printing data.table options output-formatting


【解决方案1】:

您可以将其转换为仅用于打印的 data.frame:

iris_dt = as.data.table(iris)
print(as.data.frame(iris_dt))

【讨论】:

  • 很好的解决方法,但它不能回答问题。如果您开始寻找解决方法,那么您可以提出很多建议,例如“只使用 SAS!”或“一次打印每一行!”......你明白了。
【解决方案2】:

要打印前 60 行和后 60 行(默认为前 5 和后 5):

print(dtIris, topn = 60)

【讨论】:

  • 好点。您也可以使用options(datatable.print.topn=60) 在选项中进行设置。此外,我还了解到一个功能,可以让您扩展或限制打印列的宽度options(datatable.prettyprint.char=80L)。此 prettyprint 选项默认未设置,因此您必须知道该命令才能使用它(而您可以搜索 options() 以获取其他选项,例如 datatable.print.topndatatable.print.nrows
【解决方案3】:

View()(如View(iris)View(dtIris[1:120,]))不会截断data.tables,通常比在控制台打印/喷出data.* 更好。

【讨论】:

  • 非常好!甚至可以在 RStudio 服务器环境中工作,并让我将一个小报告复制到 Excel 中以供后代使用。
  • @geneorama -- 感谢您添加该注释。我通常使用 vanilla Windows R gui 或 Windows emacs 安装工作,想知道View() 的实现范围有多大。我特别好奇它在 *NIX 机器上产生了什么。
  • 它也可以在 linux 中工作,在这里...但我不知道如何复制报告。
【解决方案4】:

一个杂乱无章的选项,但您始终可以将其导出到 excel 中以方便地查看它。

library(xlsReadWrite)
write.xls(mydata, "c:/mydata.xls")

【讨论】:

  • data.tables 用于处理大量数据。用 Excel 玩得开心。
  • 因此我输入了“一个混乱的选项”。取决于数据的大小。
  • 有凌乱再有O_O
  • 如果您已经在使用 R 并且您对特定问题的解决方案是将数据导出到 Excel,请在 Stack Overflow 上询问更好的方法。
  • 蒂莫西,你可能会发现这很有用:stackoverflow.com/questions/12164897/…
【解决方案5】:

data.table的打印方法有一个参数nrows

args(data.table:::print.data.table)
function (x, nrows = 100L, digits = NULL, ...) 

您可以使用它来控制打印的行数:

print(dtIris, nrow=105)
.....
99:          5.1         2.5          3.0         1.1 versicolor
100:          5.7         2.8          4.1         1.3 versicolor
101:          6.3         3.3          6.0         2.5  virginica
102:          5.8         2.7          5.1         1.9  virginica
103:          7.1         3.0          5.9         2.1  virginica
104:          6.3         2.9          5.6         1.8  virginica
105:          6.5         3.0          5.8         2.2  virginica
     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species

【讨论】:

  • +1 这也是常见问题解答 2.11。另请注意,奇怪的是,在提示符下输入print(DT)(有或没有nrows)比只输入DT 更快。在 data.table 方法出现打印头部和尾部之前,似乎是 R 在第二种(更常见的)情况下(在调度期间?)复制整个对象。如果有人知道为什么 R 会这样做,我很想知道。请参阅 FR#1001 REPL print copy 中的 cmets 关于 applyClosure
  • nrows 在我的情况下不起作用,它只显示截断的表。但是,topn 有效。有点奇怪。我用过例如data.table:::print.data.table(dtIris,nrows = 100)
  • 在我的情况下 n 有效,但 nrowstopn 都无效 (R 3.3.2)
  • print(DT, topn=150) 为我工作以显示前 150 行。 R 版本 3.4.2 (2017-09-28) data.table_1.10.4-3 平台:x86_64-pc-linux-gnu (64-bit) 运行于:Ubuntu 16.04.3 LTS
猜你喜欢
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多