Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何制作';头部';是否自动应用于输出?_R - Fatal编程技术网

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
not
data.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