大家好,我是R的初学者。我对于R中类别的组织方式不太熟悉。我注意到有些class()调用返回一个类别,而另一些调用则返回多个类别名称。
示例1
{我的对象名称是“sassign”} 这是我的数据:
acctnum gender state zip zip3 first last book_ nonbook_ total_ purch child youth cook do_it refernce art geog buyer
1 10001 M NY 10605 106 49 29 109 248 357 10 3 2 2 0 1 0 2 no
2 10002 M NY 10960 109 39 27 35 103 138 3 0 1 0 1 0 0 1 no
3 10003 F PA 19146 191 19 15 25 147 172 2 0 0 2 0 0 0 0 no
4 10004 F NJ 07016 070 7 7 15 257 272 1 0 0 0 0 1 0 0 no
5 10005 F NY 10804 108 15 15 15 134 149 1 0 0 1 0 0 0 0 no
6 10006 F NY 11366 113 7 7 15 98 113 1 0 1 0 0 0 0 0 yes
现在,如果我在上面输入class(object),我会得到:
class(sassign)
[1] "data.frame"
我对这个很满意。我明白这个数据结构属于数据框架类型。
例子2 最近我发现了Wickham的tibbleR包。 以下是我将数据框架转换为Tibble的方法:
tib_sassign<-as_data_frame(sassign)
class(tib_sassign)
[1] "tbl_df" "tbl" "data.frame"
我在这里迷失了方向。我不知道tbl_df和tbl之间的区别。然而,我的假设是tibble软件包通过返回对象(类似于抽象类)使我们的生活更加轻松,可以用作tibble(“tbl”)、数据框(“data.frame”)或tbl_df(我不知道tbl_df是什么意思)。我阅读了dplyr软件包的在线pdf,但我认为他们没有解释清楚这个问题。我相信他们认为人们知道上面提到的内容是什么意思。
我阅读了RStudio关于https://blog.rstudio.org/2016/03/24/tibble-1-0-0/的博客,但我认为他们没有描述清楚上述输出的含义。我也阅读了Norman Matloff的书,但我认为书中没有涉及到这个问题。 我还在谷歌上搜索了"tbl_df""tbl""data.frame",但大多数结果都涉及某些代码出现问题,并没有解释上述输出的含义。
示例3 我现在开始研究R中的时间序列。这就是我不得不开这个帖子的原因。 以下是我所做的:
t_sassign <-data.frame(group_by(sassign,last))
t_sassign<-ts(t_sassign,start = c(2014,1),frequency = 12)
class(t_sassign)
[1] "mts" "ts" "matrix"
在这里,“last”是月份的数量。虽然我相信我会以某种方式完成我需要做的事情,但我仍然不明白上面的结果意味着什么。
我还在StackOverflow上搜索过,但大多数结果都是关于在JAVA中返回Class的讨论。
我有三个问题:
问题1) 如果有人能提供一个例子,那就太棒了,这样我就可以理解class()的输出。
问题2) 如果有人能提供一个运用问题1中讨论的概念的代码片段,那我将非常感激。这样,我就能永远记住这个概念了。
问题3) 如果您知道一本涉及这些概念的书籍,我会很感激。我正在跟随Kabackoff的《R in Action》、Norman Matloff的《R》和StackOverflow。
非常感谢您的帮助。
(补充)下面还有另一件令人困惑的事情:
AP<-AirPassengers
class(AP)
[1] "ts"
我得到了"class type"为"ts",但继承类没有显示。我真的很迷惑,请帮帮我!
class
返回值的内容:http://adv-r.had.co.nz/S3.html - Konrad Rudolphclass
函数在 R 中的理念是提供一种面向对象的编程风格。在 R 对象上调用class
函数会返回该对象所包含的所有类(即其直接类以及直接类所继承的所有类)。例如,当您将普通的data.frame
(一个本地 R 对象)强制转换为tbl_df
时,您正在将其直接类从data.frame
更改为tbl_df
。 您可以使用inherits
函数检查 R 对象是否继承自某个类。 - Abdouinherits(as_data_frame(sassign), what = 'data.frame')
应该返回TRUE
,就像inherits(ts(sassign), what = 'matrix')
也应该返回TRUE
。 - Abdoudata.frame
是一个本地R对象,tbl
和tbl_df
都建立在其之上。我没有设计dplyr
包,但我敢说,它背后的想法是提供一个具有基本data.frame
属性和额外增强功能的对象。tbl_df
和data.table
都继承于data.frame
。而时间序列对象则继承自矩阵对象。 - Abdouprint.class
,其中.class
是适当的类。在您的第二个示例中,它找到了print.tbl_df
并打印出一些不那么占用屏幕的内容。但是,可能存在其他不知道tbl_df
的多态函数,因此R接着查找(比如)print.tbl
和print.data.frame
,使用它找到的第一个。如果什么都没有找到,它就使用print.default
。通过拥有多个类,所有类都将被搜索以寻找适当的方法。 - r2evans