目录

1.存储模式与基本类型

2.类属

3.类型转换

4.属性

5.str() 函数

6.关于赋值


1.存储模式与基本类型

R语言中根据类型可以将数据划分为:

  • 数值型(numeric)
  • 整数型(integer)
  • 字符型(character)
  • 逻辑型(logical)
  • 复数型(complex)
  • 原始型(raw)
R 的变量可以存储多种不同的数据类型,可以用使用以下函数查看数据的类型,但返回结果有差别:

typeof(x)
class(x)
mode()
storage.mode()

比如

整数型:
typeof(1:3)

返回

double 型:

typeof(c(1,2,3))

返回:

逻辑型:

typeof(c(TRUE, NA, FALSE))

返回:

字符串型:

typeof('Abc')

返回:

 注因子返回类型是 integer

typeof(factor(c('F', 'M', 'M', 'F')))

返回:

复数型: 

typeof(2 + 1i) #1不能省略

返回:

原始型(raw):

a <- charToRaw("rlanguage")
#a此时的记录为72 6c 61 6e 67 75 61 67 65,是字符串中每个字符的原始存储格式
a
typeof(a)

返回:

为了判断某个向量 x 保存的基本类型,可以用 is.xxx() 类函数,如 is.integer(x), is.double(x),
is.numeric(x), is.logical(x), is.character(x), is.complex(x), is.raw(x)。其中 is.numeric(x)integerdouble 内容都返回真值。
在 R 语言中数值一般看作 double, 如果需要明确表明某些数值是整数,可以在数值后面附加字母 L,如
is.integer(c(1, -3))

返回:

is.integer(c(1L, -3L))

返回:

整数型缺失值是 NA,而 double 型的特殊值除了 NA 外,还包括 Inf, -Inf 和 NaN,其中 NaN 也是缺失值, Inf 和-Inf 不算是缺失值。
对 double 类型,可以用 is.finite() 判断是否有限值,NA、Inf, -Inf 和 NaN 都不是有限值;用 is.infinite() 判断是否 Inf 或-Inf;is.na() 判断是否 NA 或 NaN;is.nan() 判断是否 NaN。

如:

c(-1, 0, 1)/0

返回:

我们来判断一下结果是否为缺失值:

is.na(c(-1, 0, 1)/0)

返回:

严格说来,NA 表示逻辑型缺失值,但是当作其它类型缺失值时一般能自动识别。NA_integer_ 是整数型缺失值,NA_real_ 是 double 型缺失值,NA_character_ 是字符型缺失值。

在 R 的向量类型中,integer 类型、double 类型、logical 类型、character 类型、还有 complex 类型和 raw 类型称为原子类型 (atomic types),原子类型的向量中元素都是同一基本类型的。比如,double 型向量的元素都是 double 或者缺失值。除了原子类型的向量,在 R 语言的定义中,向量还包括后面要讲到的列表(list),列表的元素不需要属于相同的基本类型,而且列表的元素可以
不是单一基本类型元素。
typeof() 函数可以返回向量的类型,列表返回结果为"list",如
typeof(list("a", 1L, 1.5))

返回:

原子类型的各个元素除了基本类型相同,还不包含任何嵌套结构,如:

c(1, c(2,3, c(4,5)))

返回:

2.类属

R 具有一定的面向对象语言特征,其数据类型有一个 class 属性,函数 class() 可以返回变量类型的类属,可以用使用以下函数查看数据的类属,但返回结果有差别:
typeof(x)
class(x)
mode()
storage.mode()
比如
typeof(factor(c('F', 'M', 'M', 'F')))

返回:

mode(factor(c('F', 'M', 'M', 'F')))

返回:

storage.mode(factor(c('F', 'M', 'M', 'F')))

返回:

class(factor(c('F', 'M', 'M', 'F')))

返回:

class(as.numeric(factor(c('F', 'M', 'M', 'F'))))

返回:

R 有一个特殊的 NULL 类型,这个类型只有唯一的一个 NULL 值,表示不存在。要把 NULL 与 NA 区分开来,NA 是有类型的(integer、double、logical、character 等), NA 表示存在但是未知。用 is.null() 函数判断某个变量是否取 NULL。

3.类型转换

可以用 as.xxx() 类的函数在不同类型之间进行强制转换。如
转换为数值型
as.numeric(c(FALSE, TRUE))

返回:

转换为字符型

as.character(sqrt(1:4))

返回:

类型转换也可能是隐含的,比如,四则运算中数值会被统一转换为 double 类 型,逻辑运算中运算元素会被统一转换为 logical 类型。逻辑值转换成数值时,TRUE 转换成 1,FALSE 转换成 0。

在用 c() 函数合并若干元素时,如果元素基本类型不同,将统一转换成最复杂的 一个,复杂程度简单到复杂依次为:logical<integer<double<character
c(FALSE, 1L, 2.5, "3.6")

返回:

不同类型参与要求类型相同的运算时,也会统一转换为最复杂的类型,如:

TRUE + 10

返回:

paste("abc", 1)

返回:

4.属性

除了 NULL 以外,R 的变量都可以看成是对象,都可以有属性。
在 R 语言中, 属性是把变量看成对象后,除了其存储内容(如元素)之外的其它附加信息,如 维数、类属等。对象 x 的所有属性可以用 attributes() 读取,如
定义x
x <- table(c(1,2,1,3,2,1)); print(x)

返回:

读取x的属性

attributes(x)

返回:

table() 函数用了输出其自变量中每个不同值的出现次数,称为频数。从上例可以看出,table() 函数的结果有三个属性,前两个是 dim 和 dimnames, 这是数组 (array) 具有的属性;另一个是 class 属性,值为"table"。因为 x 是数组,可以访问如
x <- table(c(1,2,1,3,2,1))
x[1]

返回:

x["3"]

返回:

也可以用 attributes() 函数修改属性,如

attributes(x) <- NULL
x

返回:

如上修改后 x 不再是数组,也不是 table。

class 属性是特殊的。如果一个对象具有 class 属性,某些所谓 “通用函数 (generic functions)” 会针对这样的对象进行专门的操作,比如,print() 函数在显示向量和回归结果时采用完全不同的格式。这在其它程序设计语言中称为 “重载”(overloading)

可以用 attr(对象, " 属性名") 读取和修改单个属性。向量的元素名是 names 属性,例如
ages <- c(" 李明"=30, " 张聪"=25, " 刘颖"=28)
names(ages)

返回:

attr(ages, "names")

返回:

attr(ages, "names") <- NULL
ages

返回:

还可以用 unname() 函数返回一个去掉了 names 属性的副本。

5.str() 函数

用 print() 函数可以显示对象内容。如果内容很多,显示行数可能也很多。用 str() 函数可以显示对象的类型和主要结构及典型内容。例如
s <- 101:200
attr(s,'author') <- ' 李小明'
attr(s,'date') <- '2016-09-12'
str(s)

返回:

6.关于赋值

要注意的是,在 R 中赋值本质上是把一个存储的对象与一个变量名联系在一起 (binding),多个变量名可以指向同一个对象。对于基本的数据类型如数值型向量,两个指向相同对象的变量当一个变量被修改时自动制作副本,如
x <- 1:5
y <- x
y[3] <- 0
x

返回:

y

返回:

这里如果 y 没有与其它变量指向同一对象,则修改时直接修改该对象而不制作副本。
但是对于有些比较复杂的类型,两个指向同一对象的变量是同步修改的。这样的类型的典型代表是闭包 (closure),它带有一个环境,环境的内容是不自动制作副本的。

R语言基础入门(7)之数据类型的性质相关推荐

  1. R语言基础入门(全)

    R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...

  2. R语言基础入门(学习笔记通俗易懂版)

    文章目录 R语言预备知识 获取工作目录 设置工作目录 注释 变量名的命名 赋值 变量的显示 查看与清除变量 函数帮助文档查询 函数 安装R包 文件的读取 文件的输出 软件的退出与保存 R语言语法 向量 ...

  3. R语言基础入门(3)之数据类型与相应运算1

    目录 一.常量与变量 1.常量 2.变量 二.数据类型 三.数值型向量 3.1 c() 函数 3.2 length(x) 3.3 numeric() 四.向量运算 1.标量和标量运算 2.向量与标量运 ...

  4. R语言基础入门(4)之数据类型与相应运算2

    目录 一.逻辑型向量与比较运算 二. 逻辑运算 三.逻辑运算函数 一.逻辑型向量与比较运算         逻辑型是 R 的基本数据类型之一,只有两个值 TRUE 和 FALSE, 缺失时为 NA. ...

  5. R语言 ---- 基础入门

    (一)向量 赋值: > x <- c(1,2,3,4,5) # 使用<-赋值,c表示连接 > x [1] 1 2 3 4 5> y <- c(x,6,7,8) &g ...

  6. R语言基础入门(10)之矩阵和数组

    目录 1.矩阵 创建矩阵 查看矩阵的行与列数 转置 2.矩阵子集 3.矩阵行列命名 4.命名后取子集 5.逻辑下标取子集 6.正整数向量的矩阵取子集 7.返回对角线向量 8.创建单位矩阵 9.cbin ...

  7. R语言基础入门(9)之因子类型

    目录 1.因子 2.table() 函数 3.tapply() 函数 4.forcats 包的因子函数 练习 1.因子         R 中用因子代表数据中分类变量, 如性别.省份.职业.有序因子代 ...

  8. R语言基础入门(6)之向量下标和子集

    目录 1.正整数下标 2.负整数下标 3.空下标与零下标 4.下标超界 5.逻辑下标 6. which().which.min().which.max() 函数 7. 元素名 8.用 R 向量下标作映 ...

  9. R语言基础入门,看这里!

最新文章

  1. 干货丨2017年AI与深度学习要点大全
  2. Java进阶06 容器
  3. 用辩证、动态的眼光看世界
  4. 【转载】 详细介绍Flex中操作XML
  5. python 神经网络_推荐 :用Python实现神经网络(附完整代码)!
  6. 称重问题 —— 哪个是假币?
  7. Python写视图界面--pyqt的使用
  8. python 传参open
  9. webpack4学习笔记(一)
  10. 第一次 Zul'grub
  11. coredump详解
  12. Ucient、Netdraw的安装与使用-----分析人物间的关系和重要性
  13. Cadence全家桶Capture+Allegro流程-5-编辑焊盘并制作封装
  14. 机器视觉实验二:道路车流量计数实验(OpenCV-python代码)
  15. 收集的Word2007技巧大全
  16. 计算机系固态硬盘机械硬盘,固态硬盘和机械硬盘可以在一起使用吗?
  17. 浪潮信息服务器哪个好,华为服务器和浪潮服务器哪个好?
  18. UCOSII 学习笔记(卢有亮视频相关习题)
  19. 以贝叶斯思维看待世界
  20. 10.27Unity事件、场景烘焙、Render Texture

热门文章

  1. Win11开始菜单没反应怎么办 Win11开始菜单点了没反应解决方法
  2. 腾讯视频手机app下载安装_腾讯视频怎么签到
  3. 轻量级RTSP服务模块和RTSP推流模块适用场景区别
  4. 前台等待事件 oracle,Oracle等待事件之buffer busy waits
  5. linux下利用nohup后台运行jar文件包程序
  6. SpringBoot引入本地jar包
  7. 流浪地球开机动画包zip_【文娱热点】流浪地球2定档2023大年初一;迪士尼计划裁员32000人...
  8. vue 用jsp 还是html,如何在jsp页面里使用vue
  9. python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...
  10. IDEA——Git 的设置与使用