R 如何制作';头部';是否自动应用于输出?
我有一大堆大数据帧,所以每次我想显示它们时,我必须使用R 如何制作';头部';是否自动应用于输出?,r,R,我有一大堆大数据帧,所以每次我想显示它们时,我必须使用头: head( blahblah(somedata) ) 在头几百次之后,打字头总是会变老,所以如果可能的话,我想用一种简单的方法来完成。与java相比,R最酷的一点是,如果你知道这个秘密咒语的话,像这样的事情通常非常容易 我在选项中搜索,找到了max.print,它几乎可以工作,只是现在有一个时间延迟 head( blahblah(somedata) ) 。。。。是瞬间的(在我的感知范围内) 。。。。大约需要3秒钟,因此比键入head
头:
head( blahblah(somedata) )
在头几百次之后,打字头总是会变老,所以如果可能的话,我想用一种简单的方法来完成。与java相比,R最酷的一点是,如果你知道这个秘密咒语的话,像这样的事情通常非常容易
我在选项中搜索,找到了max.print
,它几乎可以工作,只是现在有一个时间延迟
head( blahblah(somedata) )
。。。。是瞬间的(在我的感知范围内)
。。。。大约需要3秒钟,因此比键入head
在打印大型数据结构时,是否有某种方法可以使头
自动应用
复制此行为的一段代码:
long_dataset = data.frame(a = runif(10e5),
b = runif(10e5),
c = runif(10e5))
system.time(head(long_dataset))
options(max.print = 6)
system.time(print(long_dataset))
使用data.table
包(和data.table
notdata.frame
objects)将我的评论放入答案中,将只自动打印前5行和后5行(一旦data.table大于100行)
我同意@thelatemail的建议,即重新定义print.data.frame
:
print.data.frame <- function(df) {
if (nrow(df) > 10) {
base::print.data.frame(head(df, 5))
cat("----\n")
base::print.data.frame(tail(df, 5))
} else {
base::print.data.frame(df)
}
}
data.frame(x=1:100, y=1:100)
# x y
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
# ----
# x y
# 96 96 96
# 97 97 97
# 98 98 98
# 99 99 99
# 100 100 100
print.data.frame 10){
基本:打印。数据。帧(头部(df,5))
类别(“---\n”)
基本::打印.数据.帧(尾部(df,5))
}否则{
base::print.data.frame(df)
}
}
数据帧(x=1:100,y=1:100)
#xy
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
# ----
#xy
# 96 96 96
# 97 97 97
# 98 98 98
# 99 99 99
# 100 100 100
一个更精细的版本可以把所有的东西排列在一起,避免重复的标题,但是你明白了
你可以在.Rprofile
或Rprofile.site
文件中设置这样的功能(请参见?Startup
),这样每次启动R会话时它都会出现。不确定什么是最佳做法,但我认为max.print
选项听起来不错。或者,您可以编辑print.data.frame
函数,使其只打印前10行吗?使用data.tables而不是data。frames@mnel,很有趣。这听起来是个好方法。它似乎工作得很好。看起来data.tables解决了很多问题,事实上?@Paul,你添加的示例非常有用。谢谢在我的.rprofile
中,我保持h听起来不错。我还没有鼓起勇气使用data.table,但它们似乎解决了很多问题。与data.frame相比,data.table的使用范围有多广?(我想我是在问,这样我就可以感觉到它是多么的可能是无bug、功能完整,并且可以有效地与不同的库一起工作)@HughPerkins在维护软件包和消除bug方面非常积极。我相信data.table
包是通用的。它甚至有。这是一个伟大的解决方案!尤其是与.Rprofile组合时。我知道我迟早应该使用data.table,但现在我所有的代码仍然使用data.frames!
library(data.table)
DT <- data.table(long_data)
DT
1: 0.19613138 0.88714284 0.25715067
2: 0.25405787 0.76544909 0.75632468
3: 0.24841384 0.22095875 0.52588596
4: 0.72766161 0.79696771 0.88802759
5: 0.02448372 0.77885568 0.38199993
---
999996: 0.28230967 0.09410921 0.84420162
999997: 0.73598931 0.86043537 0.30147089
999998: 0.86314546 0.90334347 0.08545391
999999: 0.85507851 0.46621131 0.23892566
1000000: 0.33172155 0.43060483 0.44173400
print.data.frame <- data.table:::print.data.table
long_dataset
1: 0.19613138 0.88714284 0.25715067
2: 0.25405787 0.76544909 0.75632468
3: 0.24841384 0.22095875 0.52588596
4: 0.72766161 0.79696771 0.88802759
5: 0.02448372 0.77885568 0.38199993
---
999996: 0.28230967 0.09410921 0.84420162
999997: 0.73598931 0.86043537 0.30147089
999998: 0.86314546 0.90334347 0.08545391
999999: 0.85507851 0.46621131 0.23892566
1000000: 0.33172155 0.43060483 0.44173400
print.data.frame <- function(df) {
if (nrow(df) > 10) {
base::print.data.frame(head(df, 5))
cat("----\n")
base::print.data.frame(tail(df, 5))
} else {
base::print.data.frame(df)
}
}
data.frame(x=1:100, y=1:100)
# x y
# 1 1 1
# 2 2 2
# 3 3 3
# 4 4 4
# 5 5 5
# ----
# x y
# 96 96 96
# 97 97 97
# 98 98 98
# 99 99 99
# 100 100 100