R语言中的switch与其它语言中的switch有很大区别。
在R中,switch函数的语法形式如下:
其中,expr为表达式,其值或为一个整数值或为一个字符串;list为一个列表。
运行机理:若expr的计算结果为整数,且值在1~length(list)之间时,则switch()函数返回列表相应位置的值。若expr的值超出范围,则没有返回值(老版本的R中返回NULL)。
例1:
由该例可知,x的值为2,则switch函数根据传入的值2,输出列表中的第2个值:国家纳米科学中心。
例2:看看下面两个例子的输出值是多少:
若switch()中的参数list是有名定义时,则当expr等于元素名时,返回变量名对应的值,否则没有返回值。
例3:
youlike<-"fruit"
switch(youlike, drink="water", meat = "beef", fruit = "apple", vegetable="cabbage")
我们使用switch函数的这一性质可以定义一个函数实现多种 *** 作:
R语言的switch结构是常用的一种结构
工具/原料
R语言开发环境
R语言开发工具
方法/步骤
打开R语言开发工具,RGui
R语言switch的使用方法
先定义一个向量
R语言switch的使用方法
使用for结构对switch进行循环输出
R语言switch的使用方法
编写switch结构的语言
R语言switch的使用方法
回车后,根据print函数输出switch函数的结构
R语言switch的使用方法
6
应用解析:for对向量bd进行循环,
通过print对switch定义的结构判断结构中符合向量的要求,
然后把符合要求的输出!
seq函数是R语言中的基本函数,其功能是生成一个向量。
使用方法如下:
seq(0,1,lengthout=100)
上一行语句生成一个100个值的等差数列,首项为0,末项为1
拓展:
你还可以使用rep函数生成向量。
用法如下:
rep(0,100)
第一个位置表示重复的单元,第二个位置表示重复的次数。这样会生成一个100个0的向量。
R={<3,1>,<4,2>,<5,3>,<5,1>}是一个由4个点组成的关系集,我们可以将这个关系集看作是一个有向图,其中每个点都表示为一个位置向量。
为了求解该关系集的商集,我们需要先确定它是否为等价关系。等价关系需要满足三个条件:自反性、对称性和传递性。
- 自反性:对于任意的向量a,必有aRa,其中aRb表示(a,b)属于R。在这个关系集中,每个点都和自己有关系,因此自反性成立。
- 对称性:对于任意的向量a和b,如果aRb,则bRa。在这个关系集中,并不是每个点都可以互相到达,因此对称性不成立。
- 传递性:对于任意的向量a、b和c,如果aRb且bRc,则aRc。在这个关系集中,我们可以看到 (3,1) R (5,3) R (5,1),因此传递性成立。
因此,这个关系集不是等价关系。而商集的构造必须要使用一个等价关系,因此在这种情况下我们需要先构造出这个关系集的等价关系,然后再进行商集的构造。
我们可以从这个关系集中找到所有可以到达的点,把它们划分到一个等价类中。为方便计算,我们可以先将向量去重,得到向量集合V={<3,1>,<4,2>,<5,3>,<5,1>},然后从其中任意选择一个向量开始,遍历它可以到达的所有向量,并标记它们为同一个等价类。以向量<3,1>为例,可以到达<5,3>和<5,1>,因此我们可以将这三个向量标记为同一个等价类,记作{<3,1>,<5,3>,<5,1>}。然后我们需要从V集合中找到一个未被标记的向量,重复这个过程,直到所有的向量都被划分到一个等价类中。
经过上述处理,我们可以将原来的关系集R划分为三个等价类:
[{<3,1>,<5,3>,<5,1>}], [{<4,2>}], [{<}]
每个等价类中的向量之间可以互相到达,因此它们可以看作是一个元素。这样,我们就可以使用等价类来构造商集。
- 商集中的元素:{ [{<3,1>,<5,3>,<5,1>}] , [{<4,2>}] , [{<>}] }
- 商集中的关系:对于任意的的a和b,如果它们属于不同的等价类,则[{a}] R [{b}]。
根据这个定义,我们可以得到该关系集的商集为:
{ [{<3,1>,<5,3>,<5,1>}] , [{<4,2>}] , [{<>}] },
其中,{<>}表示一个空集,它是一个等价类。
例如,在平面内运动的质点在t时刻的坐标(x, y)可以描述为
x = f (t), y = g(t),t∈I .
这样点(x, y) = ( f (t), g(t))形成平面曲线C ,它是质点的运动路径,它用参数方程来描述.如果用r(t)表示从原点到质点在时刻t的位置P( f (t), g(t))的向量,那么
r(t) = OP = { f (t), g(t)} = f (t)i + g(t)j 首先,我们通过向量值函数的分量函数来定义它的极限,然后再定义它的连续性.
对于二维向量值函数r(t) = f (t)i + g(t)j,设它在t0 的某去心邻域内有定义,
如果lim f(t)=a (t→t0),lim g(t)=b (t→t0)
则称当t →t0 时,向量值函数r(t)的极限存在,其极限为lim r(t)=a i+b j (t→t0)
如果二维向量值函数r(t) = f (t)i + g(t)j在0 t 的某邻域内有定义,且lim r(t)=r(to) (t→t0)
则称向量值函数r(t)在点t0 处连续.如果r(t)在区间I 的每个点上连续,则称r(t)为区间I 上连
续的向量值函数. lim r(t)=a i+b j (t→t0)
其中lim f(t)=a (t→t0),lim g(t)=b (t→t0)
1、创建一个向量,使用rnorm函数产生服从正态分布的100个数。
2、使用语句my_vector[my_vector>05]。
3、重新创造一个包含空值的向量x,看下空值在哪个位置,使用isna函数。R是用于统计分析、绘图的语言和 *** 作环境。R是属于GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。
R语言数据对象与运算
R语言数据对象与运算 笔记整理
21 数据对象及类型
R语言创建和控制的实体被称为对象(object)
ls()命令来查看当前系统里的数据对象
R对象的名称必须以一个英文字母打头,并由一串大小写字母、数字或钟点组成
注意:R区分大小写
不要用R的内置函数名称作为数据对象的名称,如c、length等
22 数据对象类型
R语言的对象包括
数值型(numeric):实数, 可写成整数(integers)、小数(decimal fractions)、科学记数(scientific notation)
逻辑型(logical):T(true)或F(FALSE)
字符型(character):夹在" "或之间
复数型(complex):形如a+bi
原味型(raw):以二进制形式保存数据
缺省型(missing value):有些统计资料是不完整的,当一个元素或值在统计的时候是“不可得到(not available)”或“缺失值(missing value)”的时候,相关位置可能会被保留并赋予一个特定的NA(not available)值,任何NA的运算结果都是NA。
辨别和转换数据对象类型的函数:
辨别 转换
character ischaracter() as,character()
complex
double
integer
logical
NA
numeric
23 数据对象构造
R语言里的数据对象主要有六种构造:向量(vector)、矩阵(matrix)、数组(array)、列表(list)、数据框(data frames)、因子(factor)
231 向量(vector)是由有相同基本类型元素组成的序列,相当于一维数组
5个数值组成的向量x,这是一个用函数c()完成的赋值语句,这里c()可以有任意多个参数,而它输出的值则是一个把这些参数首尾相连形成的一个向量
R的赋值符号除了“<-”外,还有"->""="
例如:
> c(1,3,5,7,9) -> y
> y
[1] 2 5 8 3
> z = c(1,3,5,7,9)
> z
[1] 1 3 5 7 9
assign()函数对向量进行赋值
length():可返回向量的长度
mode()可返回向量的数据类型
正则序列 用 “:”符号,可产生有规律的正则序列(: 的运算级别最高)
函数seq()产生有规律的各种序列
seq(from,to ,by) from 给序列的起始值,to表示序列的终止值,by表示步长(by 省略时,表示步长值为1)
> seq(1,10,2)
[1] 1 3 5 7 9
> seq(1,10)
[1] 1 2 3 4 5 6 7 8 9 10
有时关注的是数列的长度,利用句法:seq(下界,by=,length=)
> seq(1,by=2,length=10)
[1] 1 3 5 7 9 11 13 15 17 19
rep(x,times,……)x表示要重复的对象,times表示重复的次数
> rep(c(1,3),4)
[1] 1 3 1 3 1 3 1 3
> rep(c(1,3),each=4)
[1] 1 1 1 1 3 3 3 3
对每个元素进行重复;
R中的内置函数:
mean()来示向量的均值
median()求是位数
var()求方差
sd()求标准差
sort()对向量排序
rev()将向量按原方向的反方向排列
rank()给求出向量的秩
prod()求向量连乘积
append()为向量添加元素
对向量运算常见函数表
函数 用途
sum() 求和
max() 求最大值
min() 求最小值
range() 求极差(全矩)
mean() 求均值
median 求中位数
var() 求方差
sd() 求标准差
sort() 排序
rev() 反排序
rank() 求秩
append() 添加
replace() 替换
match() 匹配
pmatch() 部分匹配
all() 判断所有
any() 判断部分
prod() 积
232 矩阵
矩阵(matrix)是将数据用行和列排列的长方形表格,它是二维的数组,其单元必须是相同的数据类型,通常用列来表示不同的变量,用行表示各个对象。
其句法是:
matrix(data=NA,ncol=1,byrow-=FALSE,dimnames=NULL)
data是必须的,其它几个选择参数。
nrow表示矩阵的行数
ncol表示矩阵的列数
byrow默认为FALSE,表示矩阵按列排列,如设置为T,表示按行排列;
dimnames可更改矩阵行列名字
diag()函数生成对角矩阵
diag()这个函数比较特别,当数据是向量时则生成对角矩阵,但当数据是矩阵时,则返回对角元素
也可用函数diag()生成单位矩阵
当我们生成了某个矩阵后,若要访问矩阵的某个元素或某行(列),可以利用形如A[i,j]的形式得到相应的索引矩阵
矩阵可进行相应的加减乘除运算,但运算过程中要注意行数和列数的限制条件
R里AB并不是表示矩阵相乘,只表示矩阵对应的元素相乘
矩阵相乘应用A%%B
dim()返回矩阵的行数和列数
nrow()返回矩阵的行数
ncol()返回矩阵的列数
solve()返回矩阵的逆矩阵
对矩阵运算的常见函数
函数 用途
asmatrix() 把非矩阵的转换成矩阵
ismatrix() 辨别是否矩阵
diag() 返回对角元素或生成对角矩阵
eigen() 求特征值和特征向量
solve() 求逆矩阵
chol() Choleski分解
svd() 奇异值分解
qr() QR分解
det() 求行列式
dim() 返回行列数
t() 矩阵转置
apply() 对矩阵应用函数
R语言还提供了专门针对矩阵的行或列计算的函数
如 colSUms()对矩阵各列求和 colMeans()求矩阵各列的均值
类似的有 rowSums()rowMeans()
更一般的方法:
apply()函数来对各行各列进行运算
句法是:apply(X,MARGIN,FUN,……)
X表示要处理的数据
MARGIN表示函数作用的范围
取1表示对行运用函数
取2表示对列运用函数
FUN表示要运用的函数
rbind()、cbind()将两个或两个以上的矩阵合并起来
rbind()表示按行合并,cbind()则表示按列合并
233 数组
数组(array)可以看作是带有多个下标的类型相同的元素的集合。
数组的生成函数是array(),其句法是
array(data=NA,dim=length(data),dimnames-NULL)
data表示数据,可以为空
dim 表示维数
dimnames可以更改数组难度的名称
234 列表
向量、矩阵和的单元必须是同一类型的数据,若一个数据对象需要含有不同的数据类型,可采用列表(list)这种数据对象的形式。
列表是一个对象的有序集合构成的对象,列表中包含的对象又称为它的分量(components),分量可以是不同的模式或(和)类型
语法式为:list (变量1=分量1,变量2=分量2,……)
若要访问列表的某一成分,可以用LST[[1]],LST[[2]]的形式访问
因分量可以被命名,故可以在列表名称后加$符号,再写上成分名称来访问列表分量
函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型、列表里成分的名字
235 数据框
数据框(data frame)是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。数据框每列是一个变量,每行是一个观测 。
对可能列入数据框中的列表有如下的一些限制:
1.分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框。
2.矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列、元素或者变量。
3.数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值。
4.在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数。
R中用函数dataframe()生成数据框,其句法是:dataframe(data1,data2,……)
数据框的列名默认为变量名,也可对列名进行重新命名
也可以对数据框的行名进行修改
236 因子和有序因子
分类型数据经常要把数据分成不同的水平或因子(factor)
生成因子的命令是factor(),其句法是:factor(data,levels,labels,……)
其中data表示数据
levels是因子水平向量
labels是因子的标签向量
levels,labels是备选项,可以不选
若上面的每个因子并不表示因子的大小,要表达因子之间有大小顺序(考虑因子之间的顺序),则可以用 ordered()函数产生
24 数据的录入及编辑
c函数:c函数是把各个值联成一个向量或列表,可以形成数值型向量、字符型向量或其它类型向量
scan函数:功能类似于c函数,实际上是一种键盘输入数据函数。当输入scan(),然后按回车键,这时将等待输入数据,数据之间只要空格分开即可(c函数要用逗号分开)。输入完数据,再按回车键,这时数据录入完毕。
scan函数还可以读入外部文本文件,若现有一个文本文件,datatxt,读入这个文件的命令是:> x=scan(file="dattxt")
若原文件的数据之间有逗号等分隔符,用scan读入应该去掉这些分隔符,其命令是:> x=scan(file="dattxt",sep=",")
编辑数据
dataentry命令
xx原先未被定义,现在赋予其一个空值,这时会出现一个电子表格界面,等待输入数据:> dataentry(xx=c(NA))
当电子表格关闭后,数据会自动保存
edit命令用来编辑函数,也可用来编辑数据,但不会自动保存
fix函数与edit类似,但它可以自动保存
从外部文件读入数据
从文本文件读取:
> s1=readtable("studenttxt")
> s1
V1 V2 V3
1 class sex score
2 1 女 80
3 1 男 85
4 2 男 92
5 2 女 76
6 3 女 61
7 3 女 95
8 3 男 83
读入表格数据的命令是:readtable
忽略掉标签而直接使用默认的行标签
> s2=readtable("studenttxt",header=T)
> s2
class sex score
1 1 女 80
2 1 男 85
3 2 男 92
4 2 女 76
5 3 女 61
6 3 女 95
7 3 男 83
从网络读入数据
url可以从网页上读入正确格式的数据,要借助readtable函数
> address=http://wwwthe-data-minecom/bin/view/Misc/WebHome
/sampletxt
> readtable(file=url(address))
读入其他格式的数据库
要读入其他格式的数据库,必须先安装"foreign"模块,它不属于R的8个内置模块,需在使用前安装。 library(foreign)
SAS:R只能诗篇SAS Transport format(XPORT)文件,需要把普通的SAS数据文件(ssd和sas7bdat)转换成Transport format(XPORT)文件,再用命令:readxport()
SPSS数据库:readspss()可读入SPSS数据文件
Epi info数据库:
要给数据集一个名字,则是;readepiinfo("文件名rec")->名称
Stata数据库:
R可读入Stata5,6,7的数据库
读入数据文件后,使用数据集名$变量名,即可使用各个变量
> readdta(“文件名dta”)
读入数据文件后,使用数据集名$变量名,即可使用各个变量。
>mean(data$age)
便是计算数据集 data中的变量age的均数。
25 函数、循环与条件表达式
251 编写函数
句法是:
函数名 = function (参数1,参数2…)
{
函数体
函数返回值
}
对于这类只有一个算术式的简单函数,也要不要{}
>mean(data$age)
便是计算数据集 data中的变量age的均数。
若不使用圆括号,直接输入函数名,按回车键将显示函数的定义式:
单参数:使函数个性化,可使用单参数,函数将会根据参数的不同,返回值不同
> welcomesb = function(names) print(paste("welcome",names,"to
use R"))
> welcomesb("Mr fang")
[1] "welcome Mr fang to use R"
> welcomesb("Mr Wang")
[1] "welcome Mr Wang to use R"
默认参数:即不输入任何参数
函数的默认参数
> welcomesb=function(names="Mr fang")print(paste("welcome",
names,"to use R"))
> welcomesb()
[1] "welcome Mr fang to use R"
当函数体的表达式超过一个时,要用{}封起来
252 for循环
for循环的句法是:
for (变量 in取值向量) {
表达式…
}
数据准备
R函数的诸多有趣特性之一,就是它们可以应用到一系列的数据对象上,包括标量、向量、矩阵、数组和数据框。
R中提供了一个apply()函数,可将一个任意函数“应用”到矩阵、数组、数据框的任何维度上。
apply(x, MARGIN, FUN, , simplify = TRUE)
其中,x为数据对象,可以是数组、矩阵、数据框,数据至少是二维的,MARGIN是维度的下标,MARGIN=1表示行,MARGIN=2表示列。FUN是自定义调用的函数,可为任意R函数,而则包括了任何想传递给FUN的参数。
apply函数只能用于处理矩阵类型的数据,也就是说所有的数据必须是同一类型。因此要使用apply函数的话,需要将数据类型转换成矩阵类型。
lapply(x, FUN)
lapply函数将函数应用于输入变量x的每一个元素,返回一个与x长度相同的列表。x可以是列表,向量或数据框。
sapply(x, FUN)
x可以是列表,矩阵或数据框,以向量或矩阵形式输出结果。执行的功能与lapply函数相同。
tapply(X, INDEX, FUN = NULL)
tapply用于数据框类型的数据,可以按因子变量分组计算统计量。 X可以是数组、矩阵、数据框等分割型数据向量,INDEX是一个或多个因子的列表,每个因子的长度都与x相同,FUN为自定义的调用函数。 53
参考资料:
R语言数据结构主要有以下四种:
四种数据结构,重点掌握 向量 和 数据框
判断数据结构的函数: class()
向量的详细讲解在上一篇文章,以下主要讲数据框,矩阵,列表:
以下大部分 *** 作使用的数据框为df
几个重要的函数:查看数据框的行数和列数,行名和列名;以及单独查行的数量,列的数量
数据框取子集有几种方法 : $ 符号,坐标,名字,逻辑值
在 [,] 里,行在前面(左边),列在后面(右边),行与列用逗号 , 隔开: [行,列]
中括号里的逗号,表示维度的分割
数据框按照逻辑值取子集,TRUE对应的行/列留下,FALSE对应的行/列去掉。
修改第二列的列名,就是修改列名这个向量的第二个元素
https://blogcsdnnet/weixin_39718006/article/details/110516670
后续的笔记会有详细介绍
矩阵不能用 $ 符号取子集
t():转置函数,行与列的互换
asdataframe():转换,把矩阵变为数据框 ,用asmatrix()函数也能把数据框变为矩阵
聚类,相似的行,相似的列会聚在一起。热图自动聚类,行和列的相对位置发生了变化,只是列与列,行与行之间的变化规律。
![热图自动聚类]]( https://upload-imagesjianshuio/upload_images/17511166-f6e2432a04cffbbepngimageMogr2/auto-orient/strip%7CimageView2/2/w/1240 )
热图默认聚类,修改参数,不让聚类,热图与表达矩阵对应。
默认的设置不符合自己的预期,可以子啊作者允许的范围内定义。
查看函数帮助文档,参考修改,达到自己的要求。
列表没有列名和行名,只有元素的名字。列表可以由数据框,矩阵,向量,单独的一个数字都可以组成。
列表没有行和列的概念,只有元素,取子集的两种方式: [[]] , $ ,
$ 有两个作用:数据框取子集和列表取子集。在矩阵和向量里不能用 $ 。
用 class() 函数更能具体说明问题, 判断数据结构和数据类型
以上内容是听 生信技能树 小洁老师的 R语言线上课 ,根据自己的理解记录下来,小洁老师授课非常细心,对不同水平的同学都照顾到,并且补充很多技巧以及注意事项。
认识R语言的四种数据结构,小洁老师强调重点掌握向量和数据框,在实战中遇到很多数据结构都是数据框,表达矩阵可以转化为数据框,数据框的一列可以看做是一个向量。小洁老师把实战中会需要的 *** 作融入到练习题,在实战中能联想起小洁老师讲过的知识点。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)