我想为R创建一个函数,而不是显示head and tail as asked and answered in this thread。该问题的解决方案基本上建议使用这样的版本(稍加修改),它可以正常工作。
ht <- function(x, n = 6L, m=n, returnList=FALSE, ...) {
if (!returnList) {
print(head(x, n, ...))
cat("...\n")
print(tail(x, m, ...))
invisible(NULL)
}
else {
list(head = head(x, n, ...), tail = tail(x,m, ...))
}
}
它适用于数据框
> ht(trees, 3)
Girth Height Volume
1 8.3 70 10.3
2 8.6 65 10.3
3 8.8 63 10.2
...
Girth Height Volume
29 18.0 80 51.5
30 18.0 80 51.0
31 20.6 87 77.0
和matrices
> ht(diag(10), 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 0 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0
[3,] 0 0 1 0 0 0 0 0 0 0
...
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[8,] 0 0 0 0 0 0 0 1 0 0
[9,] 0 0 0 0 0 0 0 0 1 0
[10,] 0 0 0 0 0 0 0 0 0 1
和载体
> ht(1:10, 3)
[1] 1 2 3
...
[1] 8 9 10
但是,我不喜欢输出查找矢量的方式。上面的例子中显示了两个问题:
数字之间的间距不同,因为尾端包括“10”,它有两位数,而头端只包含一位数字。
尾端的索引从[1]开始,但我希望它从[8]开始。
所以我喜欢输出(对于矢量)看起来像这样
> ht(1:10, 3)
[1] 1 2 3
...
[8] 8 9 10
第一个问题可能可以通过对提取的向量进行一点点记录来解决。潜在的乏味但可行。但是,我无法看到如何在不重新创建输出的情况下解决第二个问题。 tail()
返回一个向量,因此tail(1:10,3)
的索引从1开始就不足为奇了,因为向量c(8, 9, 10)
被传递给print.default()
。
现在,尾部输出可以使用类似下面的内容启动但是如果线条变得太长则会混淆间距并导致各种问题,因为它不会以{{{{{{{{ 1}}确保。
print.default()
任何好的选择/想法都会受到赞赏