在R中结合头部和尾部方法

     2023-02-21     235

关键词:

【中文标题】在R中结合头部和尾部方法【英文标题】:combining head and tail methods in R 【发布时间】:2012-07-20 23:20:02 【问题描述】:

我经常使用 R 包 utils 中的 head(d) 和 tail(d) 方法——经常一个接一个。所以我为这两个函数写了一个简单的包装器:

    ht <- function(d, m=5, n=m)
      # print the head and tail together
      cat(" head -->  ", head(d,m), "\n", "--------", "\n", "tail -->  ", tail(d,n), "\n")
    

我得到了一些意想不到的结果。有人可以帮我理解为什么吗? (所以我可以修复它或至少了解您的解决方案!)。

一些背景...

数值可以正常工作:

x <- 1:100
ht(x)

复杂也是如此:

ni <- as.complex(1:100)
ht(ni)

和字符:

ll <- letters[1:26]
ht(ll)

矩阵失去了它的结构,返回 [1,1] 到 [5,5] + [16,1] 到 [20,5] 但作为两个向量 - 比较:

m <- matrix(1:10, 20)
ht(m)

到:

head(m, 5)
tail(m,5)

我想像 utils 方法一样保留矩阵结构 - 这可能吗?

最后(好吧,可能还有更多的错误,这正是我要做的)data.frames 是一团糟:

df <- data.frame(num=x[1:26], char=ll)
ht(df)

这会产生以下错误:

head -->   Error in cat(list(...), file, sep, fill, labels, append) :   
  argument 2 (type 'list') cannot be handled by 'cat'

到目前为止的步骤:

由于 utils 方法在按位完成时保持矩阵整洁,因此我尝试通过以下编辑来解决问题:

function(d, m=5, n=m)
  # print the head and tail together
  rb <- rbind(head(d, m), tail(d,n))
  if (class(d) == 'matrix')
    len <- nrow(rb)
    cat(" head -->  ", rb[(1:m),], "\n", "--------", "\n", "tail -->  ", rb[((len-n):len),], "\n")
  
  else cat(" head -->  ", rb[1,], "\n", "--------", "\n", "tail -->  ", rb[2,], "\n")

这似乎没有对矩阵做任何事情,并且在我使用时仍然会出现相同的错误:

ht(df)

我从错误中猜测 cat() 这里存在一些问题,但我无法弄清楚它是什么或如何解决它。

有人可以帮忙吗?

【问题讨论】:

在您的 R 控制台中,当您键入 head(m, 5) 时,它会显示与 print(head(m, 5)) 相同的结果。因此,如果您希望结果看起来像这样,请考虑使用 print 而不是 cat flodel's 就是答案。将输出注释的 cat 函数与打印函数混合以显示对象。 @flodel,把它作为答案。 【参考方案1】:

如果您已经在使用tidyverse 原则进行编码并使用%&gt;%(管道)运算符,那么实际上很容易只使用一条线:

library(magrittr)

your_dataframe %>% 
rbind(head(., 8), tail(., 8)
 %>% 
nrow()

# [1] 16

这基本上使用rbind 来合并your_dataframe 的顶部head() 和底部tail() 用于调用 lambda 表达式(更多信息 here)。 headtail 中的 . 表示“标准输入”(your_dataframe)。

【讨论】:

【参考方案2】:

有人建议我把我的评论变成答案。

在您的 R 控制台中,当您键入 head(m, 5) 时,您看到的打印在屏幕上的内容实际上是 print(head(m, 5)) 的结果。因此,如果这是您希望输出的样子,请考虑在显示对象的 headtail 时使用 print 函数而不是 cat

ht <- function(d, m=5, n=m) 
  # print the head and tail together
  cat("head -->\n")
  print(head(d,m))
  cat("--------\n")
  cat("tail -->\n")
  print(tail(d,n))


m <- matrix(1:10, 20)
ht(m)
# head -->
#      [,1]
# [1,]    1
# [2,]    2
# [3,]    3
# [4,]    4
# [5,]    5
# --------
# tail -->
#       [,1]
# [16,]    6
# [17,]    7
# [18,]    8
# [19,]    9
# [20,]   10

我发现@mrdwab 的答案是一个非常优雅的解决方案。它没有显式使用print,而是返回一个列表。但是,当从 R 控制台调用他的函数并且输出未分配给任何内容时,它会打印到控制台(因此隐式使用 print)。我希望这可以帮助您了解发生了什么。

【讨论】:

谢谢,这很有帮助。我注意到 utils 中的 head 和 tail 具有 ftable、table 和 function 的方法——这种方法也能处理所有这些情况吗? (我是 afk,所以现在不能检查 - 但想发表评论说谢谢你的解释)。 是的,任何同时存在headtail 方法的东西。【参考方案3】:

为什么不修改你的函数来输出一个列表呢?

ht <- function(d, m=5, n=m)
  # print the head and tail together
  list(HEAD = head(d,m), TAIL = tail(d,n))

这是您的 matrixdata.frame 的输出:

ht(matrix(1:10, 20))
# $HEAD
#      [,1]
# [1,]    1
# [2,]    2
# [3,]    3
# [4,]    4
# [5,]    5
# 
# $TAIL
#       [,1]
# [16,]    6
# [17,]    7
# [18,]    8
# [19,]    9
# [20,]   10

ht(data.frame(num=x[1:26], char=ll))
# $HEAD
#   num char
# 1   1    a
# 2   2    b
# 3   3    c
# 4   4    d
# 5   5    e
# 
# $TAIL
#    num char
# 22  22    v
# 23  23    w
# 24  24    x
# 25  25    y
# 26  26    z

【讨论】:

没有理由不这样做——我只是没有意识到这是必要的。在 ncols 为 1 的情况下,您认为最好取消分类并将其视为向量吗?还是最好保留列表形式? @ricardo,你打算对输出做什么?它是否以交互方式用于获取有关您的数据的一些信息?你在保存输出吗?不过,一般来说,我会说,如果您想要准确地表示您的数据,只需将其保留在列表形式中即可。 我只是计划在终端上使用它——我只热衷于使用 cat,因为它会返回一个 NULL ......所以如果我忘记了,我不会遇到分配问题'。 mrdwab,经过一些实验,我认为返回值并不是世界上最糟糕的事情......它很可能很有用。我已经修改了您的代码,以便输出与输入相关,因此如果您“忘记”,可以看到发生了什么。我认为这解决了我的担忧。因此,现在是: function(d, m=5, n=m) # 打印头尾一起 list +1。 @mrdwab:我选择了您的解决方案 - 我已经将它用于博客文章 here。我链接回这个答案 - 仅供参考。

r语言head函数和tail函数获取dataframe列表list向量vector的头部和尾部数据:tail提取数据对象的尾部数据head提取数据对象的头部数据默认6条数据自定义设置返回条数

R语言head函数和tail函数获取dataframe、列表list、向量vector的头部和尾部数据:tail提取数据对象的尾部数据、head提取数据对象的头部数据、默认6条数据、自定义设置返回条数目录 查看详情

angularjs中ng-include指令实现头部和尾部的共用(代码片段)

...用AngularJS的时候,我们可以使用ng-include指令实现页面头部和尾部的共用,。不过在使用ng-include指令的时候也是需要注意一些细节的。就是共用的头部和尾部的路径在ng-include中写法<!DOCTYPEhtml><htmllang="en">... 查看详情

使用iframe的方式实现共用的头部和尾部页面(代码片段)

在前端开发中,有些页面的头部和尾部是一模一样的,如果我们每个页面都重新写一次,那样会很麻烦,这时候我们可以将头部和尾部提取出来,让所有的页面都可以复用头部和尾部,减轻我们的工作量。... 查看详情

python去除空格的方法(代码片段)

...意replace第一个冒号中间有一个空格)#去掉全部空格头部,尾部,中间key=input("输入内容").replace("","")print("我是头部:"+key+":我是尾部")实现效果 使用join和spilt #去掉全部空格头部... 查看详情

list操作

L表示从左边(头部)开始插与弹出,R表示从右边(尾部)开始插与弹出。 一、概述:     在Redis中,List类型是按照插入顺序排序的字符串链表。和数据结构中的普通链表一样,我们可以在其头部(left)和尾部(right... 查看详情

如何在html不同的页面中,共用头部与尾部?

一、asp语言首先制作一个头部文件head.asp,或者一个底部文件foot.asp。如主页是index.asp,调用头部代码是在index.asp文件代码的开始位置(第一个标记后面,<head>标记前面)增加如下代码:<!–#includefile=”head.asp”&nd... 查看详情

可添加头部尾部recyclerview,很帅哦~

WrapRecyclerView是一个可以添加头部和尾部的RecyclerView,并且提供了一个WrapAdapter,它可以让你轻松为RecyclerView添加头部和尾部。 示例中轮转图使用了Android-LoopView,使用它你可以轻松实现轮转大图。是不是很心动?那么抓紧来staror... 查看详情

listview常用方法-案例介绍(代码片段)

...**ListView的常用方法实例:设置一个ListView的页面,其页面头部是图片,尾部是Button按钮方式一:首先在对应的布局文件中添加ListView控件,然后可在主活动文件中对该页面添加头部和尾部相应控件,如下:publicclassMainActivityextendsA... 查看详情

页面内容小于一屏时仍能头部在头部尾部在尾部

<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>页面内容小于一屏时仍能头部在头部尾部在尾部</title><style>*{padding:0;margin:0;text-align:center;}/*html,body{height: 查看详情

按行读取文本文件的头部、尾部和向后

】按行读取文本文件的头部、尾部和向后【英文标题】:head,tailandbackwardreadbylinesofatextfile【发布时间】:2011-08-1906:13:31【问题描述】:如何在python中实现\'head\'和\'tail\'命令并通过文本文件的行向后读取?【问题讨论】:Readafilein... 查看详情

iostableview不让头部和尾部跟随

-(void)scrollViewDidScroll:(UIScrollView*)scrollView{UITableView*tableview=(UITableView*)scrollView;CGFloatsectionHeaderHeight=AutoWHGetHeight(50);CGFloatsectionFooterHeight=AutoWHGetHeight(0);CGFloat 查看详情

html网页公用头部与尾部的一些方法

方法一:使用框架<iframe></iframe>【不推荐,另据说搜索引擎可能不收录iframe引用的页面】<div> <iframesrc="header.html"width="100%"height="auto"marginwidth="0"marginheight="0"hspace=0vspace=0frameborder="0"scrollin 查看详情

网站中公用头部与尾部

一、html  1. <iframesrc="1.html"frameborder="0"></iframe>  2. <embedsrc="1.html"/>二、写公用的js 文件,js中写字divde符串,然后在需要的页面适当位置引入公用的js.三、ajax动态拉取填充四、后端语言(inc 查看详情

python pandas同时选择头部和尾部

】pythonpandas同时选择头部和尾部【英文标题】:pythonpandasselectbothheadandtail【发布时间】:2017-07-1904:50:26【问题描述】:对于Pandas中的DataFrame,如何同时选择前5个值和后5个值?例如In[11]:dfOut[11]:ABC2012-11-290002012-11-301112012-12-012222012-... 查看详情

如何向php数组中头部和尾部添加元素

...sp;  print_r($array_push);// 输出数组结果array_unshift头部添加元素array_push的原理类似,只是方向不同。语法格式如下:intarray_unshift(array&$array,mixed$var[,mixed$...])下面我们直接通过实例跟大家介绍array_unshift()函数,具体代码... 查看详情

7.5queue集合(代码片段)

...结构,队列通常是指“先入先出”(FIFO)的容器。队列头部保存在队列中存放时间最长的元素,队列尾部通常保留在队列中存放时间最短的元素。新元素插入(offer)到队列的尾部,访问(poll)操作将会返回队列头部的元素。通常队... 查看详情

静态的html,怎么共用头部和尾部?

不要用那种iframe的.谢谢参考技术A用包含文件<!include--(+含有头代码的文件名)> 查看详情

css头部和尾部固定,中间可以动态

1<template>2<divid="app">3<router-view/>45<divclass="dHeadlistlist-purposedTitle">6<transitionenter-active-class="animatedzoomInLeft"7leave-active-class="animatedzoomInRight 查看详情