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

目录

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) integer double 内容都返回真值。
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() 判断是否有限值NAInf, -Inf 和 NaN 都不是有限值;用 is.infinite() 判断是否 Inf -Infis.na() 判断是否 NA NaNis.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 是有类型的(integerdoublelogical、character 等), NA 表示存在但是未知。用 is.null() 函数判断某个变量是否取 NULL

3.类型转换

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

返回:

转换为字符型

as.character(sqrt(1:4))

返回:

类型转换也可能是隐含的,比如,四则运算中数值会被统一转换为 double 类 型,逻辑运算中运算元素会被统一转换为 logical 类型。逻辑值转换成数值时,TRUE 转换成 1FALSE 转换成 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),它带有一个环境,环境的内容是不自动制作副本的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++班级通讯录

C实现班级通讯录管理系统 设计流程 本系统基于C实现班级通讯录管理系统。功能包括增、删、查、改等。通讯录包括的个人信息有姓名、学号、性别、籍贯、政治面貌、手机号、QQ号、宿舍等。主要用到了指针、结构体、遍历链表、文件读取等知识点。 优点 1 . 此系统含有欢迎使用的…

两万字教会你解析库之Beautiful Soup

目录 1.简介 2.准备工作 3.解析器 4.基本用法 5.节点选择器 5.1选择元素 5.2提取信息 5.3嵌套选择 5.4关联选择 6.方法选择器 7. css 选择器 7.1 嵌套选择 7.2 获取属性 7.3 获取文本 总结 1.简介 简单来说&#xff0c;Beautiful Soup就是Python的一个HTML或XM…

C语言实现随机抽取纸牌

程序设计要求 本程序负责发一副标准纸牌&#xff0c;每张标准纸牌都有一种花色&#xff08;梅花、方块、黑桃、红桃&#xff09;和一个等级&#xff08;2&#xff0c;3&#xff0c;4&#xff0c;5&#xff0c;6…K,A&#xff09;。程序需要用户指明手机有几张牌。 程序设计流…

R语言基础入门(8)之日期时间

目录 1.日期和日期时间类型 2.从字符串生成日期数据 3.日期显示格式 4.访问日期时间的组成值 5.日期舍入计算 6.日期计算 6.1 时间长度 6.2 时间周期 6.3 时间区间 7.基本 R 软件的日期功能 7.1 生成日期和日期时间型数据 7.2 取出日期时间的组成值 7.3 日期计算 练…

C语言点名器

设计流程 1 . 使用求模符号“%”求模数控制随机数产生范围。 2 . 使用rand&#xff08;&#xff09;计算出一个随机数。 3 . 使用函数time()来获取时间。 4 . 用二维字符数组储存名字&#xff0c;产生范围类的随机数在用下标调用数组里面的名字。 效果展示 完整代码 #inclu…

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

目录 1.因子 2.table() 函数 3.tapply() 函数 4.forcats 包的因子函数 练习 1.因子 R 中用因子代表数据中分类变量, 如性别、省份、职业。有序因子代表有序量度&#xff0c;如打分结果&#xff0c;疾病严重程度等。用 factor() 函数把字符型向量转换成因子&#xff0c;如x…

2万字带你攻略掉Selenium

目录 1. 准备工作 1.1 安装selenium库 1.2 安装浏览器驱动 2. 基本用法 2.1 初始化浏览器对象 2.2 访问页面 2.3 设置浏览器大小 2.4 刷新页面 2.5 前进后退 3. 获取页面基础属性 4. 定位页面元素 4.1 id定位 4.2 name定位 4.3 class定位 4.4 tag定位 4.5 lin…

IDEA里的web.xml页面的Servlet名称报错下方出现红色下划线

错误显示 对于上述错误是因为只有新建的Servlet名称但是并没为为这个Servlet指定访问地址的路径和映射&#xff0c;我们只需要添加访问地址的路径和映射就可以解决这个问题了。 修改之后的代码 <?xml version"1.0" encoding"UTF-8"?> <web-ap…

Python之Hello World

python实现Hello World项目 在项目上点击右键New–>File,然后输入文件名Hello World 一个Hello World文件创建完成 编写相应的代码 在空白的地方右击选择Run"Hello World" 程序运行成功&#xff0c;输出Hello World

knn(k近邻算法)——python

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 导入相关库 4.2 读取数据 4.3 读取变量名 4.4 定义X,Y数据 4.5 分离训练集和测试集 4.6 计算欧式距离 4.7 可视化距离矩阵 4.8 预测样本 4.9 查看正确…

C语言中的文件是什么?

我们对文件的概念已经非常熟悉了&#xff0c;比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种&#xff0c;最主要的作用是保存数据。 在操作系统中&#xff0c;为了统一对各种硬件的操作&#xff0c;简化接口&#xff0c;不同的硬件设备也都被看成一个文件。对…

knn(k近邻算法)——matlab

目录 1. 基本定义 2. 算法原理 2.1 算法优缺点 2.2 算法参数 2.3 变种 3.算法中的距离公式 4.案例实现 4.1 读取数据 4.2 分离训练集和测试集 4.3 归一化处理 4.4 计算欧氏距离 4.5 排序和输出测试结果 4.6 计算准确率 总代码 1. 基本定义 k最近邻(k-Nearest N…

C语言打开文件详解

C语言中操作文件之前必须先打开文件&#xff1b;所谓“打开文件”&#xff0c;就是让程序和文件建立连接的过程。 打开文件之后&#xff0c;程序可以得到文件的相关信息&#xff0c;例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中&#xff0c;程序还可以记…

python turtle虎年来拜年了

1.画个虎 # codingutf-8 from turtle import * import timeCOLOR #B2814Ddef set_start(x, y, w, cCOLOR):penup()setx(x)sety(y)setheading(towards(0, 0))width(w)pencolor(c)pendown()speed(0)def left_rotate(time, angle, length):for i in range(time):left(angle)forwa…

TOPSIS法 —— matlab

目录 1.TOPSIS法介绍 2. 计算步骤 &#xff08;1&#xff09;数据标准化 &#xff08;2&#xff09;得到加权后的矩阵 &#xff08;3&#xff09;确定正理想解和负理想解 &#xff08;4&#xff09;计算各方案到正&#xff08;负&#xff09;理想解的距离 &#xff08;…

TOPSIS法 —— python

目录 1.TOPSIS法介绍 2. 计算步骤 &#xff08;1&#xff09;数据标准化 &#xff08;2&#xff09;得到加权后的矩阵 &#xff08;3&#xff09;确定正理想解和负理想解 &#xff08;4&#xff09;计算各方案到正&#xff08;负&#xff09;理想解的距离 &#xff08;…

C语言随机读写文件

实现随机读写的关键是要按要求移动位置指针&#xff0c;这称为文件的定位。 文件定位函数rewind和fseek 移动文件内部位置指针的函数主要有两个&#xff0c;即 rewind() 和 fseek()。 rewind() 用来将位置指针移动到文件开头&#xff0c;前面已经多次使用过&#xff0c;它的…

mysql-installer安装教程(详细图文)

目录 1.安装 2.配置系统环境变量 3.配置初始化my.ini文件 4.MySQL彻底删除 5.Navicat 安装 1.安装 先去官网下载需要的msi&#xff0c;在这放出官网下载地址下载地址 这里我具体以8.0.28 为安装例子&#xff0c;除了最新版安装界面有些变动以往的都是差不多的。 过去的版本…

Java三种随机数生成方法

java的三种随机数生成方式 随机数的产生在一些代码中很常用&#xff0c;也是我们必须要掌握的。而java中产生随机数的方法主要有三种&#xff1a;     第一种&#xff1a;new Random()     第二种&#xff1a;Math.random()     第三种&#xff1a;currentTimeMil…

Python MySQL入门连接

目录 基本环境准备 navicat的傻瓜使用方式 python连接 mysql安装教程&#xff1a;传送门 基本环境准备 WINR 输入cmd回车打开cmd&#xff0c;登录mysql: mysql -h localhost -u root -p然后输入密码回车即可。 创建用户名为testuser1&#xff1a; CREATE USER testuser1…