R语言基础(四):数据类型
R语言基础(一):注释、变量
R语言基础(二):常用函数
R语言基础(三):运算
5.数据类型
5.1 基本数据类型
R语言基本数据类型大致有六种:
整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、原型Raw
其中整数和浮点数也可以归类为数字类型numeric。数字默认是浮点数double(小数),整数后面加上字母
L
才是整数。字符串:单引号或双引号包裹起来,比如:“hello,world”、‘My name is MengLaoShi’
逻辑:也叫布尔型,只有TRUE和FALSE两个值。注意TRUE是布尔型,而’TRUE’是字符串
复合类型表示虚数,虚数单位是
i
原型:是以一种二进制形式存储的数据
可以使用typeof()函数查看数据类型
> typeof(TRUE)
[1] "logical"
> typeof(2) #数字中的浮点型
[1] "double"
> typeof(3L) #整数后面加一个L代表整数类型
[1] "integer"
> typeof(3+2i) #复合类型,虚数
[1] "complex"
> typeof("hello") #字符型
[1] "character"
> charToRaw("a") #raw类型(原型)
[1] 61
字符串有一些常用的操作,
> a='hi'
> b='R'
> paste(a,b) #连接字符串,默认空格
[1] "hi R"
> paste(a,b,sep=",") #指定连接符
[1] "hi,R"
> nchar("Google") #获取字符串长度
[1] 6
> toupper('a') #转换大写
[1] "A"
> tolower('a') #转换小写
[1] "a"
> substring('abcdefg',2,4) #截取字符串
[1] "bcd"
> format(11.23456789, digits = 5) #转成字符串,显示n位数,四舍五入
[1] "11.235"
> format(13.7, width = 6) #转化成长度为6的字符串,左边补空格
[1] " 13.7"
5.2 对象类型【重点】
5.2.1 向量(vector)
R语言中的向量和数学中的向量类似,创建向量使用
c()
函数
> a=c(1,2)
> b=c(2,4)
> a+b #向量加法
[1] 3 6 #对应位置的相加
> b[1] #获取向量中的某个元素,索引从1开始
[1] 2
> a[4] #索引超出范围
[1] NA
向量有些常用的函数
> a=c(4,8,6,2)
> sort(a) #排序(升序)
[1] 2 4 6 8
> order(a) #返回排序后的索引
[1] 4 1 3 2
> a[order(a)] #通过排序后的索引,拿到有序的向量
[1] 2 4 6 8
> rev(a) #反转原向量
[1] 2 6 8 4
如果生成连续序列的向量,可以使用如下形式:
> a=1:5
> a
[1] 1 2 3 4 5
> a=5:1
> a
[1] 5 4 3 2 1
> sum(a) #向量中元素求和
[1] 15
> sum(1:5)#向量中元素求和
[1] 15
> mean(a) #向量中元素求平均值
[1] 3
> var(a) #向量中元素求方差
[1] 2.5
> sd(a) #向量中元素求标准差
[1] 1.581139
> min(a) #向量中元素求最小值
[1] 1
> max(a) #向量中元素求最大值
[1] 5
> range(a)#向量中元素最大值和最小值(得一个二维向量)
[1] 1 5
> seq(1, 9, 2) #从1到9,方差为2的等差序列
[1] 1 3 5 7 9
> seq(0, 1, length.out=5) #指定0开始,1结束,共生成5个数的等差数列
[1] 0.00 0.25 0.50 0.75 1.00
> rep(0, 4) #产生重复序列
[1] 0 0 0 0
5.2.2 因子(factor)
因子用于存储不同值的数据,创建因子使用 factor() 函数,向量作为输入参数。
> color_vector=c('红','黄','红','绿') #向量
> color_factor=factor(color_vector) #生成因子
> color_factor
[1] 红 黄 红 绿
Levels: 红 黄 绿 #不重复的
5.2.3 矩阵(matrix)
矩阵是一种二维行列的数据结构。
> m=matrix(c(1,2,3,4,5,6),2,3) #把一个向量转变成2行3列的矩阵(按列填充)
> m[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> m=matrix(c(1,2,3,4,5,6),nrow=2,ncol=3) #把向量转变成2行3列的矩阵,同上
> m[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
#把向量转变成2行3列的矩阵,先填充行
> m=matrix(c(1,2,3,4,5,6),2,3,byrow=TRUE)
> m[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> m=matrix(c(1,2,3,4,5,6),nrow=2,ncol=3,byrow=TRUE) #同上
> m[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> m[1,2] #通过坐标(索引)访问第1行第2个元素
[1] 2
> m[2,3]
[1] 6
> colnames(m) = c("x", "y", "z") #给每一列起别名
> rownames(m) = c("a", "b") #给每一行起别名
> mx y z
a 1 3 5
b 2 4 6
矩阵运算:
> m1=matrix(c(1:6),2,3)
> m2=matrix(c(5:10),2,3)
> m1[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> m2[,1] [,2] [,3]
[1,] 5 7 9
[2,] 6 8 10
> m1+m2[,1] [,2] [,3]
[1,] 6 10 14
[2,] 8 12 16
> m1*m2 #对应位置元素相乘[,1] [,2] [,3]
[1,] 5 21 45
[2,] 12 32 60
> m3=matrix(c(1:6),3,2)
> m3[,1] [,2]
[1,] 1 4
[2,] 2 5
[3,] 3 6
> m1 %*% m3 #数学中的矩阵相乘[,1] [,2]
[1,] 22 49
[2,] 28 64
> m4=matrix(1:4,2,2) #逆矩阵
> m4[,1] [,2]
[1,] 1 3
[2,] 2 4
> solve(m4) #逆矩阵[,1] [,2]
[1,] -2 1.5
[2,] 1 -0.5[,1] [,2]
[1,] 1 3
[2,] 2 4
> apply(m4, 1, sum) #第二个参数为1按行操作,用 sum() 函数
[1] 4 6
> apply(m4, 2, sum) #第二个参数为2按列操作
[1] 3 7
5.2.4 数组(array)
数组是一个多维结构,存储同一种类型的数据集合。向量可以看做一维数组,矩阵是二维数组。创建数组使用array()函数,参数是一个向量,默认是一维数组。
> a=array(1:5) #一维数组
> a
[1] 1 2 3 4 5
> b=array(1:5,dim=c(3,4,2)) #每个矩阵3行4列,共2个矩阵(元素循环填充)
> b
, , 1[,1] [,2] [,3] [,4]
[1,] 1 4 2 5
[2,] 2 5 3 1
[3,] 3 1 4 2, , 2[,1] [,2] [,3] [,4]
[1,] 3 1 4 2
[2,] 4 2 5 3
[3,] 5 3 1 4
> b[3,2,1] #第1个矩阵的第2列第3行的元素
[1] 1
> b[3,,1] #第1个矩阵的第3行
[1] 3 1 4 2
> b[,3,1] #第1个矩阵的第3列
[1] 2 3 4
> matrix1=b[,,1] #取出第一个矩阵
> matrix1[,1] [,2] [,3] [,4]
[1,] 1 4 2 5
[2,] 2 5 3 1
[3,] 3 1 4 2
5.2.5 列表(list)
列表可以存放不同类型的数据,可以是数字、字符串、向量、另一个列表、矩阵、数组等
> alist <- list("Hello", c(11,22,33), TRUE, 1:5, 119.1, array(5:10),matrix(1:6,nrow=2,ncol=3))
> alist
[[1]]
[1] "Hello"[[2]]
[1] 11 22 33[[3]]
[1] TRUE[[4]]
[1] 1 2 3 4 5[[5]]
[1] 119.1[[6]]
[1] 5 6 7 8 9 10[[7]][,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> alist[1] #访问列表元素
[[1]]
[1] "Hello"
> blist=list(3:4) #将两个list合并
> clist=c(alist,blist)
> unlist(alist) #列表转换为向量[1] "Hello" "11" "22" "33" "TRUE" "1" "2" "3" "4" "5" "119.1" "5" "6" "7" "8" "9" "10" "1" "2" "3" "4" "5" "6"
5.2.6 数据框(data frame)
数据框(有的也叫数据帧)是特殊的二维表结构,有行列,每一列长度要一致,同一列的元素数据类型要相同(不同列可以不同),每一列都有唯一列名。
> table = data.frame(
+ 姓名 = c("张三", "李四"),
+ 工号 = c("001","002"),
+ 月薪 = c(1000, 2000)
+ )
> table姓名 工号 月薪
1 张三 001 1000
2 李四 002 2000
> str(table) #查看信息
'data.frame': 2 obs. of 3 variables:$ 姓名: chr "张三" "李四"$ 工号: chr "001" "002"$ 月薪: num 1000 2000
> names(table) #查看列名
[1] "姓名" "工号" "月薪"
> nrow(table) #查看一共几行
[1] 2
> ncol(table) #查看一共几列
[1] 3
> data=table(姓名,月薪)
Error in table(姓名, 月薪) : 找不到对象'姓名'
> data=data.frame(table$姓名,table$月薪) #根据列名提取数据
> datatable.姓名 table.月薪
1 张三 1000
2 李四 2000
> data=table[2,1] #读第2行第1列
> data
[1] "李四"
> data=table[c(1,2),c(2,3)] #读1~2行的2~3列
> data工号 月薪
1 001 1000
2 002 2000
> table姓名 工号 月薪
1 张三 001 1000
2 李四 002 2000
> table$性别=c("男","男") #添加一列
> table姓名 工号 月薪 性别
1 张三 001 1000 男
2 李四 002 2000 男
> newtable = data.frame(
+ 姓名 = c("小明", "小白"),
+ 工号 = c("101","102"),
+ 性别 = c("男", "女"),
+ 月薪 = c(5000, 7000)
+ )
> rbind(table,newtable) #合并两个数据框姓名 工号 月薪 性别
1 张三 001 1000 男
2 李四 002 2000 男
3 小明 101 5000 男
4 小白 102 7000 女
相关文章:

R语言基础(四):数据类型
R语言基础(一):注释、变量 R语言基础(二):常用函数 R语言基础(三):运算 5.数据类型 5.1 基本数据类型 R语言基本数据类型大致有六种: 整数Integer、浮点数Numeric、文本(字符串)Character、逻辑(布尔)Logical、复合类型Complex、…...
批处理命令--总结备忘「建议收藏」
批处理命令--总结备忘「建议收藏」 前言1、基础语法:2、批处理基本命令3、实例3.1 打开虚拟目录3.2 以当前时间为文件名,建文件夹3.3 备份postgresql数据库前言 最近用批处理命令做了一些postgresql数据库的备份,打开虚拟环境。。。发现批处理处理一些常用重复工作时真的很…...

面试知识点梳理及相关面试题(十一)-- docker
1. Docker和虚拟机的区别 容器不需要捆绑一整套操作系统,它只需要满足软件运行的最小内核就行了。 传统虚拟机技术是虚拟出一整套硬件后,在其上运行一个完成操作系统,在该系统上再运行所需应用进程容器内的应用进程直接运行于宿主的内核&am…...

k8s--services(微服务)
文章目录一、k8s网络通信service和iptables的关系二、services1.简介2.默认3.IPVS模式的service4.clusterip5.headless6.从外部访问service的三种方式(1)nodeport(2)loadbalancer7.metallb一、k8s网络通信 k8s通过CNI接口接入其他…...

【Java开发】设计模式 01:单例模式
1 单例模式介绍单例模式(Singleton Pattern)是Java中最为基础的设计模式。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对…...

10、go工程化与标准库
目录一、用go mod管理工程二、包引入规则三、init调用链四、可见性五、标准库1 - 时间函数2 - 数学计算3 - I/O操作4 - 编码一、用go mod管理工程 初始化项目:go mod init $module_name,$module_name和目录名可以不一样。上述命令会生成go.mod文件 mod…...
【Selenium自动化测试】鼠标与键盘操作
在 WebDriver 中,与鼠标操作相关的方法都封装在ActionChains 类中,与键盘操作相关的方法都封装在Keys类中。下面介绍下这两个类中的常用方法。 鼠标操作 ActionChains类鼠标操作常用方法: context_click():右击double_click()&…...
自定义javax.validation校验枚举类
枚举类单一情况 package com.archermind.cloud.phone.dto.portal.external.validation.validator;import com.archermind.cloud.phone.dto.portal.external.validation.constraints.EnumValidation; import lombok.extern.slf4j.Slf4j;import javax.validation.ConstraintVali…...

[Java·算法·中等]LeetCode39. 组合总和
每天一题,防止痴呆题目示例分析思路1题解1分析思路2题解2👉️ 力扣原文 题目 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形…...

【Linux】vi和vim编辑器
目录主题主题 三种常见模式: 正常模式 以vim 打开一个档案就直接进入一般模式了(这是默认的模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用『删除字符』或『删除整行』来处理档案内容,也可以使用「复制、…...

BIO,NIO,AIO
IO模型 用什么样的通道进行数据传输和接收,java支持3种io网络编程模式 BIO NIO AIO BIO 同步阻塞 一个客户端连接对应一个处理线程 BIO示例代码(客户端和服务端) package com.tuling.bio;import java.io.IOException; import java.net.So…...
代码随想录刷题-数组-有序数组的平方
文章目录有序数组的平方习题暴力排序双指针有序数组的平方 本节对应代码随想录中:代码随想录,讲解视频:有序数组的平方_哔哩哔哩_bilibili 习题 题目链接:977. 有序数组的平方 - 力扣(LeetCode) 给你一…...

【玩转c++】stack和queue的介绍和模拟实现
本期主题:list的讲解和模拟实现博客主页: 小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐stack的介绍和使用1.1.stack的介绍1. stack是一种容器适配器,专门用在具有后进先出操作的上…...

Linux order(文件、磁盘、网络、系统管理、备份压缩)
1. Linux 文件命令 -rwxrwxrwx chmod:change mode,用于(文件所有者或 root )变更用户(u:owner g:group o:other a:all)的权限 chmod [OPTION]… MODE[,MODE]… FILE… OPTION -R:递归修改more option:chmod…...

最详细的CentOS7安装Mysql数据库服务
1.查看是否安装mysql: rpm -qa | grep mysql如果有查出来东西,使用命令删除: rpm -e xxx2.检查是否有mysql用户组和mysql用户,没有就添加有就忽略: groups mysql 添加用户组和用户 groupadd mysql && useradd -r -g mysql mysql&a…...

【IoT】项目管理:如何做好端到端的项目管理?
今天主要来谈谈项目管理这个话题。 首先来看一个我在网络上看到的一个关于项目管理的案例或者是段子。 将项目管理的作用及意义非常直观地展示了出来。 有一个植树搞绿化的企业,在公司内部设置有五个部门,分别是: 运输部门;挖坑部…...

渲染十万条数据就把你难住了?不存在的!
虚拟列表的使用场景如果我想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好,主要有以下问题:页面等待时间极长,用户体验差CPU计算能力…...
编程学习的心路历程和困惑回顾
回首入行9年的经历,从大一开始学习C语言和数据结构,老师一直是在用IDE演示程序的编写和运行,我们也就一直在跟黑乎乎的命令行窗口打交道。 后来在一些课程的实验环节,接触到了一些别人编写好的工程代码,知道了Makefile…...

请介绍类加载过程,什么是双亲委派模型?
第23讲 | 请介绍类加载过程,什么是双亲委派模型? Java 通过引入字节码和 JVM 机制,提供了强大的跨平台能力,理解 Java 的类加载机制是深入 Java 开发的必要条件,也是个面试考察热点。 今天我要问你的问题是࿰…...

Navisworks编辑材质和Revit快速切换材质问题
一、如何在Navisworks2016中编辑材质 初次使用NW2016-2017时发现,原来用于创建编辑材质的小地球不见了,如图1所示,在各大技术群里求助没有回应,度娘搜索也总是摇头。 经过仔细排查可能出现的地方,终于找到了可以编辑材…...
Android Wi-Fi 连接失败日志分析
1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...