R语言 运算符

Python06

R语言 运算符,第1张

运算符是一个符号,通知编译器执行特定的数学或逻辑操作。 R语言具有丰富的内置运算符,并提供以下类型的运算符。

运算符的类型

R语言中拥有如下几种运算符类型:

算术运算符

关系运算符

逻辑运算符

赋值运算符

其他运算符

算术运算符

下表显示了R语言支持的算术运算符。 操作符对向量的每个元素起作用。

运算符 描述 例

关系运算符

下表显示了R语言支持的关系运算符。 将第一向量的每个元素与第二向量的相应元素进行比较。 比较的结果是布尔值。

运算符 描述 例

逻辑运算符

下表显示了R语言支持的逻辑运算符。 它只适用于逻辑,数字或复杂类型的向量。 所有大于1的数字被认为是逻辑值TRUE。

将第一向量的每个元素与第二向量的相应元素进行比较。 比较的结果是布尔值。

运算符 描述 例

& 它被称为元素逻辑AND运算符。 它将第一向量的每个元素与第二向量的相应元素组合,并且如果两个元素都为TRUE,则给出输出TRUE。

v <- c(3,1,TRUE,2+3i)

t <- c(4,1,FALSE,2+3i)

print(v&t)

它产生以下结果 -

TRUE TRUE FALSE TRUE

| 它被称为元素逻辑或运算符。 它将第一向量的每个元素与第二向量的相应元素组合,并且如果元素为真,则给出输出TRUE。

v <- c(3,0,TRUE,2+2i)

t <- c(4,0,FALSE,2+3i)

print(v|t)

它产生以下结果 -

TRUE FALSE TRUE TRUE

! 它被称为逻辑非运算符。 取得向量的每个元素,并给出相反的逻辑值。

v <- c(3,0,TRUE,2+2i)

print(!v)

它产生以下结果 -

FALSE TRUE FALSE FALSE

逻辑运算符&&和|| 只考虑向量的第一个元素,给出单个元素的向量作为输出。

运算符 描述 例

&& 称为逻辑AND运算符。 取两个向量的第一个元素,并且只有两个都为TRUE时才给出TRUE。

v <- c(3,0,TRUE,2+2i)

t <- c(1,3,TRUE,2+3i)

print(v&&t)

它产生以下结果 -

TRUE

|| 称为逻辑OR运算符。 取两个向量的第一个元素,如果其中一个为TRUE,则给出TRUE。

v <- c(0,0,TRUE,2+2i)

t <- c(0,3,TRUE,2+3i)

print(v||t)

它产生以下结果 -

FALSE

赋值运算符

这些运算符用于向向量赋值。

运算符 描述 例

<−

or

=

or

<<−

称为左分配

v1 <- c(3,1,TRUE,2+3i)

v2 <<- c(3,1,TRUE,2+3i)

v3 = c(3,1,TRUE,2+3i)

print(v1)

print(v2)

print(v3)

它产生以下结果 -

3+0i 1+0i 1+0i 2+3i

3+0i 1+0i 1+0i 2+3i

3+0i 1+0i 1+0i 2+3i

->

or

->>

称为右分配

c(3,1,TRUE,2+3i) ->v1

c(3,1,TRUE,2+3i) ->>v2

print(v1)

print(v2)

它产生以下结果 -

3+0i 1+0i 1+0i 2+3i

3+0i 1+0i 1+0i 2+3i

其他运算符

这些运算符用于特定目的,而不是一般的数学或逻辑计算。

运算符 描述 例

: 冒号运算符。 它为向量按顺序创建一系列数字。

v <- 2:8

print(v)

它产生以下结果 -

2 3 4 5 6 7 8

%in%此运算符用于标识元素是否属于向量。

v1 <- 8

v2 <- 12

t <- 1:10

print(v1 %in% t)

print(v2 %in% t)

它产生以下结果 -

TRUE

FALSE

% % 此运算符用于将矩阵与其转置相乘。

M = matrix( c(2,6,5,1,10,4), nrow = 2,ncol = 3,byrow = TRUE)

t = M % % t(M)

print(t)

它产生以下结果 -

[,1] [,2]

[1,] 65 82

[2,] 82 117

摘自: https://www.cnblogs.com/yupeter007/p/5325575.html

矩阵的存储默认是按列进行存储的

matrix (data = NA, nrow = 1, ncol = 1, byrow =FALSE, dimnames = NULL)

创建一个c(1:12)的三行四列的矩阵,

colnames<-c("c1","c2","c3","c4")

rownames<-c("r1","r2","r3")

x<-matrix(1:12,nrow=3,ncol=4,byrow=TRUE,dimnames=list(rownames,colnames))

x

c1 c2 c3 c4

r1 1 2 3 4

r2 5 6 7 8

r3 9 10 11 12

y<-t(x)

若是针对的是一个向量

y<-(1:10)

装置后得到的是行向量

[1] "matrix"

若要的到列向量则

matrix(rnorm(100),nrow=10)

matrix(2,ncol=n,nrow=m)

4.1创建对角矩阵

diag(x,ncol=n,nrow=m)

若x为矩阵 则diag(x)将会提取矩阵x的对角,则返回的是向量值

返回的是以矩阵对角的对角矩阵

[,1] [,2] [,3]

[1,] 1 0 0

[2,] 0 1 0

[3,] 0 0 1

n<-ncol

m<-nrow

为矩阵的行和列命名

rownames(x)<-c()

colnames(x)<c()

A为m×n矩阵,c>0,在R中求cA可用符号:“*”,例如:

A为m×n矩阵,B为n×k矩阵,在R中求AB可用符号:“%*%”,例如:

对矩阵求逆

方法一:直接用solve(x)

方法二:加载包MASS

library(MASS)

ginv(matrix)

向量的内积

x<-c(1:5)

y<-c(3:7)

向量的外积

向量、矩阵的外积(叉积)

设x和y是n维向量,则x%o%y表示x与y作外积.

, , 2, 1

[,1] [,2] [,3] [,4]

[1,]28 14 20

[2,]4 10 16 22

[3,]6 12 18 24

, , 1, 2

[,1] [,2] [,3] [,4]

[1,]3 12 21 30

[2,]6 15 24 33

[3,]9 18 27 36

, , 2, 2

[,1] [,2] [,3] [,4]

[1,]4 16 28 40

[2,]8 20 32 44

[3,] 12 24 36 48

outer()是更为强大的外积运算函数,outer(x,y)计算向量x与y的外积,它等价于x %o%y

函数。outer()的一般调用格式为

outer(x,y,fun=”*”)

det(x),求矩阵x的行列式值

qr(x)$rank求x矩阵的秩

解线性方程组和求矩阵的逆矩阵

R语言数据对象与运算R语言数据对象与运算 笔记整理2.1 数据对象及类型R语言创建和控制的实体被称为对象(object)ls()命令来查看当前系统里的数据对象R对象的名称必须以一个英文字母打头,并由一串大小写字母、数字或钟点组成注意:R区分大小写不要用R的内置函数名称作为数据对象的名称,如c、length等2.2 数据对象类型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 is.character() as,character()complexdoubleintegerlogicalNAnumeric2.3 数据对象构造R语言里的数据对象主要有六种构造:向量(vector)、矩阵(matrix)、数组(array)、列表(list)、数据框(data frames)、因子(factor)2.3.1 向量(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() 积 2.3.2 矩阵矩阵(matrix)是将数据用行和列排列的长方形表格,它是二维的数组,其单元必须是相同的数据类型,通常用列来表示不同的变量,用行表示各个对象。其句法是:matrix(data=NA,ncol=1,byrow-=FALSE,dimnames=NULL)data是必须的,其它几个选择参数。nrow表示矩阵的行数ncol表示矩阵的列数byrow默认为FALSE,表示矩阵按列排列,如设置为T,表示按行排列;dimnames可更改矩阵行列名字diag()函数生成对角矩阵diag()这个函数比较特别,当数据是向量时则生成对角矩阵,但当数据是矩阵时,则返回对角元素也可用函数diag()生成单位矩阵 当我们生成了某个矩阵后,若要访问矩阵的某个元素或某行(列),可以利用形如A[i,j]的形式得到相应的索引矩阵矩阵可进行相应的加减乘除运算,但运算过程中要注意行数和列数的限制条件R里A*B并不是表示矩阵相乘,只表示矩阵对应的元素相乘矩阵相乘应用A%*%Bdim()返回矩阵的行数和列数nrow()返回矩阵的行数ncol()返回矩阵的列数solve()返回矩阵的逆矩阵对矩阵运算的常见函数 函数 用途as.matrix() 把非矩阵的转换成矩阵is.matrix() 辨别是否矩阵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()则表示按列合并2.3.3 数组数组(array)可以看作是带有多个下标的类型相同的元素的集合。数组的生成函数是array(),其句法是array(data=NA,dim=length(data),dimnames-NULL)data表示数据,可以为空dim 表示维数dimnames可以更改数组难度的名称2.3.4 列表向量、矩阵和的单元必须是同一类型的数据,若一个数据对象需要含有不同的数据类型,可采用列表(list)这种数据对象的形式。列表是一个对象的有序集合构成的对象,列表中包含的对象又称为它的分量(components),分量可以是不同的模式或(和)类型语法式为:list (变量1=分量1,变量2=分量2,……)若要访问列表的某一成分,可以用LST[[1]],LST[[2]]的形式访问因分量可以被命名,故可以在列表名称后加$符号,再写上成分名称来访问列表分量函数length()、mode()、names()可以分别返回列表的长度(分量的数目)、数据类型、列表里成分的名字2.3.5 数据框数据框(data frame)是一种矩阵形式的数据,但数据框中各列可以是不同类型的数据。数据框每列是一个变量,每行是一个观测 。对可能列入数据框中的列表有如下的一些限制:1.分量必须是向量(数值,字符,逻辑),因子,数值矩阵,列表或者其他数据框。2.矩阵,列表和数据框为新的数据框提供了尽可能多的变量,因为它们各自拥有列、元素或者变量。3.数值向量、逻辑值、因子保持原有格式,而字符向量会被强制转换成因子并且它的水平就是向量中出现的独立值。4.在数据框中以变量形式出现的向量结构必须长度一致,矩阵结构必须有一样的行数。R中用函数data.frame()生成数据框,其句法是:data.frame(data1,data2,……)数据框的列名默认为变量名,也可对列名进行重新命名也可以对数据框的行名进行修改2.3.6 因子和有序因子分类型数据经常要把数据分成不同的水平或因子(factor)生成因子的命令是factor(),其句法是:factor(data,levels,labels,……)其中data表示数据levels是因子水平向量labels是因子的标签向量levels,labels是备选项,可以不选若上面的每个因子并不表示因子的大小,要表达因子之间有大小顺序(考虑因子之间的顺序),则可以用 ordered()函数产生2.4 数据的录入及编辑c函数:c函数是把各个值联成一个向量或列表,可以形成数值型向量、字符型向量或其它类型向量 scan函数:功能类似于c函数,实际上是一种键盘输入数据函数。当输入scan(),然后按回车键,这时将等待输入数据,数据之间只要空格分开即可(c函数要用逗号分开)。输入完数据,再按回车键,这时数据录入完毕。scan函数还可以读入外部文本文件,若现有一个文本文件,data.txt,读入这个文件的命令是:>x=scan(file="dat.txt")若原文件的数据之间有逗号等分隔符,用scan读入应该去掉这些分隔符,其命令是:>x=scan(file="dat.txt",sep=",") 编辑数据data.entry命令xx原先未被定义,现在赋予其一个空值,这时会出现一个电子表格界面,等待输入数据:>data.entry(xx=c(NA)) 当电子表格关闭后,数据会自动保存edit命令用来编辑函数,也可用来编辑数据,但不会自动保存fix函数与edit类似,但它可以自动保存从外部文件读入数据从文本文件读取:>s1=read.table("student.txt") >s1 V1V2V3 1class sexscore 2 1 女80 3 1 男85 4 2 男92 5 2 女76 6 3 女61 7 3 女95 8 3 男83 读入表格数据的命令是:read.table 忽略掉标签而直接使用默认的行标签>s2=read.table("student.txt",header=T)>s2 class sexscore 1 1 女80 2 1 男85 3 2 男92 4 2 女76 5 3 女61 6 3 女95 7 3 男83 从网络读入数据url可以从网页上读入正确格式的数据,要借助read.table函数> address=http://www.the-data-mine.com/bin/view/Misc/WebHome/sample.txt>read.table(file=url(address)) 读入其他格式的数据库要读入其他格式的数据库,必须先安装"foreign"模块,它不属于R的8个内置模块,需在使用前安装。 library(foreign) SAS:R只能诗篇SAS Transport format(XPORT)文件,需要把普通的SAS数据文件(.ssd和.sas7bdat)转换成Transport format(XPORT)文件,再用命令:read.xport()SPSS数据库:read.spss()可读入SPSS数据文件Epi info数据库:要给数据集一个名字,则是read.epiinfo("文件名.rec")->名称Stata数据库:R可读入Stata5,6,7的数据库读入数据文件后,使用数据集名$变量名,即可使用各个变量 >read.dta(“文件名.dta”) 读入数据文件后,使用数据集名$变量名,即可使用各个变量。>mean(data$age) 便是计算数据集 data中的变量age的均数。2.5 函数、循环与条件表达式2.5.1 编写函数句法是:函数名 = function (参数1,参数2…) { 函数体 函数返回值} 对于这类只有一个算术式的简单函数,也要不要{}>mean(data$age) 便是计算数据集 data中的变量age的均数。 若不使用圆括号,直接输入函数名,按回车键将显示函数的定义式:单参数:使函数个性化,可使用单参数,函数将会根据参数的不同,返回值不同> welcome.sb = function(names) print(paste("welcome",names,"to use R")) >welcome.sb("Mr fang") [1] "welcome Mr fang to use R" >welcome.sb("Mr Wang") [1] "welcome Mr Wang to use R" 默认参数:即不输入任何参数函数的默认参数> welcome.sb=function(names="Mr fang")print(paste("welcome", names,"to use R")) >welcome.sb() [1] "welcome Mr fang to use R" 当函数体的表达式超过一个时,要用{}封起来2.5.2 for循环for循环的句法是:for (变量 in取值向量) { 表达式… }