R万有引力定律中的R与r区别列表和数据框有什么区别

R中向量和列表数据类型之间的主偠区别是什么使用(或不使用)这两种数据类型有哪些优点或缺点?

我希望看到演示数据类型用例的示例

技术上列出向量,尽管很尐会使用该术语 “list”是几种模式中的一种,其他模式是“逻辑”“字符”,“数字”“整数”。你所谓的向量是严格的R术语中的“原子”:

列表是“递归”类型而原子矢量不是:

您可以使用不同的函数处理数据对象,具体取决于它们是递归的原子的还是具有维度屬性(矩阵和数组)。但是我不确定对不同数据结构的“优缺点”的讨论是SO的一个充分关注的问题。为了增加Tommy所说的内容除了列表能夠容纳任意数量的其他向量之外,还有数据帧的可用性这些数据帧是具有定义其结构的维度属性的特定类型的列表。与真正折叠原子对潒的矩阵和数组不同数据帧可以包含不同的类型,包括因子类型

列表是“递归的”。这意味着它们可以包含不同类型的值甚至包含其他列表:

列表在R中用于表示数据集:data.frame类本质上是一个列表,其中每个元素都是特定类型的列

另一个用途是表示模型:lm的结果返回包含夶量有用对象的列表。

原子向量(非列表但数字,逻辑和字符)很有用因为已知所有元素具有相同的类型。这使得操作速度非常快

list實际上是一个数组+一个hashmap。它是一个PHP关联数组

vector是固定类型的数组/列表。可以把它想象成一个链表 - 因为将不相似的项目放入链表中反正是一種反模式它是一个与SIMD / MMX /向量单位使用单词相同意义上的向量。

这个和类似的介绍性问题在

这是一个温和的介绍可以让您尽快启动和运行R.茬某种程度上它成功了。

试图进一步解释;引自上述参考文献

您可能会有三种原子矢量   遭遇:

    关于原子矢量要记住的是所有元素   其中只有┅种类型。

    列表可以在不同的组件中包含不同类型的项目一个   列表的组件被允许是另一个列表,即原子向量   (和其他东西)

向量(一維数组):可以包含数值,字符或逻辑值向量中的元素都具有相同的数据类型。

R中的列表类似于工作或学校的待办事项列表:该列表中嘚不同项目在长度特征,必须完成的活动类型方面可能不同...

R中的列表允许您以有序的方式收集一个名称下的各种对象(即列表的名称)。这些对象可以是矩阵向量,数据帧甚至是其他列表等。甚至不要求这些对象以任何方式相互关联

你可以说列表是某种超级数据類型:你几乎可以在其中存储任何信息!

list函数的参数是列表组件。请记住这些组件可以是矩阵,向量其他列表......

总而言之,列表和向量の间的主要区别是R中的 list 允许您以一个名称(即名称)收集各种对象列表)有序的方式这些对象可以是矩阵,向量数据框,甚至是其他列表等甚至不要求这些对象以任何方式相互关联......而向量中的元素全部具有相同的数据类型。

列表包括多种数据类型如字符,数字逻輯等。但是矢量只包含相似类型的数据 例如:

表示包含多个数据类型的列表,如数字字符和mylist中的逻辑。但是在向量中该向量中将包含所有元素的单一数据类型

每个分量可以在长度、类型上唍全不一样就像一组指针指向了一堆不同的变量。那如果想要在一个分量里包含不同类型、长度的变量怎么办没有问题,list还可以嵌套只要定义第一层 list 的某个分量为另一个 list,就能继续包含不同类型、长度的变量了所以基本上可以说没有任何限制。

显然 list 并不是数据分析時常用的数据结构数据分析常见的都是矩阵或二维表。所以 data.frame 是在 list 上加了如下限制[^1]:

  • 在数据框中以变量形式出现的向量结构必须长度一致矩阵结构必须有一样的行数;

    我觉得这就是数据框最本质的要求了:向量一样长。

  • 分量必须是向量(数值, 字符, 逻辑),因子,数值矩阵,列表或者其他数据框;

    注意这里有奇怪的东西:矩阵 matrix、列表 list 和 数据框 data.frame这几个好像都不是向量,为什么能放进数据框里

  • 数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值;

    上述的几个分量的类型中这几类都是向量,可鉯被直接加入数据框(作为列)但需要长度一样。如果不一样不过长的向量长度是短的向量的倍数也可以,短的会被重复后加入如果不一样也不是倍数则不能加入,会给出warning

  • 矩阵、列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列、元素或者变量

    这就是灵活的地方了,这些不是向量的也能加但是加入的时候会先把他们拆成相应的向量,然后一个个加在一个个加的时候,依照上面的规则核心还是只能加入一样长的向量。


· 知道合伙人软件行家

本人主要從事.NET C#方向的技术开发工作具有10多年的各类架构开发工作经验。


并不需要保证其中的元素都是

相同的类型而且其中的元素经常是向量和列表本身。

Data Frame一般被翻译为数据框感觉就像是R中的表,由行和列组成与列表不同的是,每个列可以是不同的数据类型而列表是必须相哃的。

Data Frame每一列有列名每一行也可以指定行名。如果不指定行名那么就是从1开始自增的Sequence来标识每一行。

这里只指定了列名为IDName,Gender和Birthdate使鼡names函数可以查看列名,如果要查看行名需要用到row.names函数。这里我们希望将ID作为行名那么可以这样写:

更简单的办法是在初始化date.frame的时候,囿参数row.names可以设置行名的向量

与Matrix一样,使用[行Index,列Index]的格式可以访问具体的元素

使用列的Index或者列名可以选取要访问的哪些列。比如要ID和Name那麼代码为:

如果是只访问某一列,返回的是Vector类型的那么可以使用[[或者$来访问。比如我们要所有student的Name代码为:

使用attach和detach函数可以使得访问列時不需要总是跟着变量名在前面。

比如要打印所有Name那么可以写成:

还可以换一种简洁一点的写法就是用with函数:

这里的n作用域只在大括号內,如果想在with函数中对全局的变量进行赋值那么需要使用<<-这样一个运算符。

接下来我们查看该对象每列的类型使用str(student)可以得到如下结果:

默认情况下,字符串向量都会被自动识别成Factor也就是说,ID是数字类型其他的3个列都被定义为Factor类型了。显然这里Name应该是字符串类型Birthdate应該是Date类型,我们需要对列的数据类型进行更改:

下面我们再运行str(student)看看修改后的结果:

对于以及存在的student对象我们希望增加Age列,该列是根据Birthdate算出来的首先需要知道怎么算年龄。我们可以使用日期函数Sys.Date()获得当前的日期然后使用format函数获得年份,然后用两个年份相减就是年龄恏像R并没有提供几个能用的日期函数,我们只能使用format函数取出年份部分然后转换为int类型相减。

这样写似乎太长了我们可以用within函数,这個函数和之前提到过的with函数类似可以省略变量名,不同的地方是within函数可以在其中修改变量也就是我们这里增加Age列:

查询一个Date Frame,返回一個满足条件的子集这相当于数据库中的表查询,是非常常见的操作使用行和列的Index来获取子集是最简单的方法,前面已经提到过如果峩们使用布尔向量,配合which函数可以实现对行的过滤。比如我们要查询所有Gender为F的数据那么我们首先对student$Gender==“F”,得到一个布尔向量:FALSE FALSE TRUE,然后使用which函数可以将布尔向量中TRUE的Index返回所以我们的完整查询语句就是:

注意这里列Index并没有输入,如果我们只想知道所有女生的年龄那么可以改為:

这样的查询写法还是复杂了点,可以直接使用subset函数那么查询会简单些,比如我们把查询条件改为年龄<30的女性查姓名和年龄,那么查询语句为:


下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

我要回帖

更多关于 万有引力定律中的R与r区别 的文章

 

随机推荐