R官方入门教程(3)对象的模式和属性

R是一门著名的可用于数据和统计分析的程序语言,本文翻译自R软件官方文档教程An Introduction to R,仅供学习和参考。

3 对象的模式和属性

3.1固有属性:类型(mode)和长度(length)

R 操作的实体在技术上称为对象object。数值向量、复数向量、逻辑向量、字符串向量等都是对象。这些对象的结构被称为“原子atomic”结构,因为它们的组成部分都是同种类型mode,即numericcomplexlogicalcharacterraw

向量的值必须全部属于同一类型。因此,任何给定的向量必须明确地是逻辑型、数字型、复数型、字符型或原始型的其中一个。(唯一的例外是特殊的“值”,即用于表示不可用数量的 NA,但实际上有几种类型的 NA)。请注意,向量可以为空但仍具有类型。例如,空的字符串向量用 character(0)表示,空的数值向量用 numeric(0)表示。

R也可以操作称为列表list的对象,这些对象的类型为list。它们是有序的对象序列,每个对象本身可以是任何类型。 “列表”被称为“递归recursive”而不是原子结构,因为它们的组成部分本身也可以是列表。

其他递归结构包括函数function和表达式expression。函数是R系统的组成部分,大量内置函数和用户编写的函数一起构成R系统。后文将对此进行详细讨论。表达式作为对象构成了R的高级部分,在本教程中不会直接讨论,仅在讨论R中的建模公式formulae时间接提到。

对象的类型,指的就是其基本成分的数据类型。这是对象的一个特殊属性property/attribute。除此之外,每个对象还具有另一个属性,即长度length。函数 mode(object)length(object) 可以用于显示任何对象的类型和长度。

对象的其他属性通常通过attributes(object)函数查看。模式和长度被称为对象的“固有属性“intrinsic attributes

例如,若 z 是长度为 100 的复数向量,则mode(z) 为字符串"complex",而length(z)的值为100。

R 可以几乎可以进行任何合理的类型转换(虽然有时候也会很不合理)。你可以使用as.<modeName>(object)函数进行显式转换。

> z<-0:9	# numeric型向量
> mode(z)
[1] "numeric"
> str_z<-as.character(z)
> str_z
 [1] "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"	# character型向量
> mode(str_z)
[1] "character"
> num_z<-as.numeric(str_z)	# numeric型向量
> num_z
 [1] 0 1 2 3 4 5 6 7 8 9
> mode(num_z)
[1] "numeric"

3.2 改变对象的长度

一个“空”对象仍可能具有类型。例如e <- numeric()e 成为一个类型为 numeric 的空向量。类似地,character() 是一个空的字符向量。

任何长度的对象被创建后,只需要用一个超出长度范围的索引来进行赋值就能拉长向量。因此e[3] <- 17使得 e 成为一个长度为 3 的向量(此时的前两个元素未被指定,均为 NA,第3个元素为17)。这适用于任何对象,只要新加的元素的类型和对象的类型相符即可。

这种对象长度的自动调整经常用于与输入相关的scan()函数中。

相反,要缩短对象的长度,只需要通过索引再进行一次赋值。因此,如果alpha是一个长度为10的对象,则alpha <- alpha[2 * 1:5]
将它变成一个长度为5的对象,只包括索引为偶数的元素。

我们也可以通过length(alpha) <- 3来只保留前三个元素。向量也可以通过同样的方式来增加长度,这时增加的元素将为NA

3.3 获取和设置属性

函数attributes(object)返回一个列表,其中包含当前为该对象定义的所有非内在属性。函数attr(object, name)可用于获取或设置特定属性。这些函数很少使用,除非在某些特殊情况下需要创建一些新的属性以实现某些特定目的,例如创建日期或运算符与R对象关联起来的情况。然而,该概念非常重要。在R中,属性是对象的组成部分,因此分配或删除属性时应谨慎处理。

当在赋值的左侧使用时,它可用于将新属性与对象关联或更改现有属性。例如:attr(z, "dim") <- c(10,10),将zdim(维数属性)设置为c(10,10)。这将允许R将z视为10x10矩阵。

3.4 对象的所属类

R 中的每个对象都会所属于一个类class,用class(object)函数可以查看。对于简单的向量,它们的类就是他们的类型,例如 numericlogicalcharacterlist。但matrixfactordata.frame就不一样了。

类是对象的一个特殊属性。类,允许了在 R 中可以出现面向对象的编程风格 。例如,如果一个对象具有类data.frame,它将会被以某种特殊方式打印,plot( ) 函数将能以图形方式显示它。所谓的通用函数(例如summary()),将会对特定的类的对象采取特定的行为。

要暂时消除类的影响,请使用函数 unclass()。例如,如果 winter 所属于类data.frame,那么winter将以数据框形式打印它,这更像是一个矩阵,而unclass(winter)会将其打印为普通列表形式。只有在相当特殊的情况下才需要使用此函数,其中一种情况是当您正在学习和理解类和通用函数的概念时。

通用函数和类将在后续内容中进一步讨论,但也只是简要讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值