a=2
a<-2
NA
NaN
pi
month.abb
month.name
类型 | 举例 |
---|---|
数值型 Numeric | 100, 0, -4.335 |
字符型 Character | “China” |
逻辑型 Logical | TRUE,FALSE |
因子型 Factor | 表示不同类别 |
复数型 Complex | 2+3i |
> a = 1
> a
[1] 1
> a <- 2
> a
[1] 2
> b = 3
> a > 2
[1] FALSE
> b > 2
[1] TRUE
> a > 2 & b > 2
[1] FALSE
> a > 2 | b > 2
[1] TRUE
mode()
判断储存的类型class()
判断数据的类is.numeric()
返回TRUE或FALSEis.logical()
是否为逻辑值is.character
是否为字符串is.null
是否为空is.na
是否为na> a = c(1,2,3); b = c("x","y","z")
> is.numeric(a) #a为数值型,返回TRUE
[1] TRUE
> is.numeric(b) #b为字符串型,返回FALSE
[1] FALSE
#生成了从-1到10,长度为100位的序列。R自动进行了平均化处理。
> z = seq(-1, 10, length=100) #length也可以用缩写len
> z
[1] -1.0000000 -0.8888889 -0.7777778 -0.6666667 -0.5555556 -0.4444444 -0.3333333 -0.2222222 -0.1111111 0.0000000
[11] 0.1111111 0.2222222 0.3333333 0.4444444 0.5555556 0.6666667 0.7777778 0.8888889 1.0000000 1.1111111
[21] 1.2222222 1.3333333 1.4444444 1.5555556 1.6666667 1.7777778 1.8888889 2.0000000 2.1111111 2.2222222
[31] 2.3333333 2.4444444 2.5555556 2.6666667 2.7777778 2.8888889 3.0000000 3.1111111 3.2222222 3.3333333
[41] 3.4444444 3.5555556 3.6666667 3.7777778 3.8888889 4.0000000 4.1111111 4.2222222 4.3333333 4.4444444
[51] 4.5555556 4.6666667 4.7777778 4.8888889 5.0000000 5.1111111 5.2222222 5.3333333 5.4444444 5.5555556
[61] 5.6666667 5.7777778 5.8888889 6.0000000 6.1111111 6.2222222 6.3333333 6.4444444 6.5555556 6.6666667
[71] 6.7777778 6.8888889 7.0000000 7.1111111 7.2222222 7.3333333 7.4444444 7.5555556 7.6666667 7.7777778
[81] 7.8888889 8.0000000 8.1111111 8.2222222 8.3333333 8.4444444 8.5555556 8.6666667 8.7777778 8.8888889
[91] 9.0000000 9.1111111 9.2222222 9.3333333 9.4444444 9.5555556 9.6666667 9.7777778 9.8888889 10.0000000
#生成以10为起点,-1为终点,步长为-1的序列
z = seq(10, -1, -1)
> z
[1] 10 9 8 7 6 5 4 3 2 1 0 -1
#直接生成从10到-1的序列,形式为整数
> z = 10:-1
> z
[1] 10 9 8 7 6 5 4 3 2 1 0 -1
#生成重复元素的序列,3重复1次,4重复2次,5重复3次
> x = rep(3:5, 1:3)
> x
[1] 3 4 4 5 5 5
#将序列(1,1,4,5,1,4)重复2遍
> x = rep(c(1,1,4,5,1,4), 2)
> x
[1] 1 1 4 5 1 4 1 1 4 5 1 4
#总之,注意元素的对应逻辑
> x = rep(c(1,10),c(4,5))
> x
[1] 1 1 1 1 10 10 10 10 10
> w = c(1,3,x,z);w[3] #取出w中的第三个元素(注意此时x=c(1,1,1,1,10,10,10,10,10))
[1] 1
> w
[1] 1 3 1 1 1 1 10 10 10 10 10 10 9 8 7 6 5 4 3 2 1 0 -1
> z = c("no cat","has","nine","tails")
> z[1]=="no cat" #对z中第一个元素是否等于"no cat"进行逻辑判断,返回TRUE
[1] TRUE
> rev(z) #对z中的元素进行反向排序
[1] "tails" "nine" "has" "no cat"
对元素进行命名。
> x = 1:3; names(x)=LETTERS[1:3]
> x
A B C
1 2 3
> z = sample(1:100, 10, rep=T); z
[1] 44 80 35 49 44 5 33 64 73 17
#从1:100里随机抽样10个数。replace=T说明已经抽取过的元素仍有可能重复出现。
> z = sample(1:100,10,rep=FALSE)
> z
[1] 94 17 97 9 8 36 48 64 16 20
#replace=F,不放回抽样。
##比较order(),sort()。
##对于order,返回的值表示位置,依次对应向量最小值、次小值、...最大值
##对于sort,返回的值会对向量元素排序。
> z = sample(1:100,10,rep=FALSE)
> z
[1] 24 12 45 90 36 78 88 55 56 95
> order(z)
[1] 2 1 5 3 8 9 6 7 4 10
> sort(z)
[1] 12 24 36 45 55 56 78 88 90 95
其他操作·补充
> x = c(1,4,7)
> x[2]
[1] 4
> (c(1,3,5)+5)[2]
[1] 8
> #可以单独改变一个元素的值,如
> x[2]=125
> x
[1] 1 125 7
> x[c(1,3)]=c(144,169)
> x
[1] 144 125 169
1. 随机生成20个0~1的小数,组合成4*5的矩阵
> x = matrix(runif(20),4,5)
> x
[,1] [,2] [,3] [,4] [,5]
[1,] 0.27008890 0.57096324 0.6646762 0.8309818 0.6108379
[2,] 0.66096405 0.03655500 0.6600138 0.1539677 0.8507358
[3,] 0.06422796 0.61947820 0.1168485 0.1618244 0.8271617
[4,] 0.97114728 0.01797554 0.2268782 0.6198094 0.9687446
> x = matrix(1:20,4,5);x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> x = matrix(1:20,4,5,byrow = TRUE);x
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 6 7 8 9 10
[3,] 11 12 13 14 15
[4,] 16 17 18 19 20
> x = matrix(rnorm(24),4,6); x #随机24个标准正态分布
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] -1.15665512 2.00520157 0.3012377 2.2490408 0.9002427 -0.93464240
[2,] 0.32517047 0.01256269 1.6847352 -1.4311658 -1.5370565 -0.97347666
[3,] -0.08171387 0.48406661 -0.3943626 0.1570139 -0.2758359 -2.15406500
[4,] -0.17095056 0.07226580 -0.1293965 -0.3290969 0.6597828 0.06926688
-----------------------------------------------------------------------
> nrow(x) #行数
[1] 4
> ncol(x) #列数
[1] 6
> dim(x) #行列数
[1] 4 6
-----------------------------------------------------------------------
> x[c(2,1),] #取第二行和第一行
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0.3251705 0.01256269 1.6847352 -1.431166 -1.5370565 -0.9734767
[2,] -1.1566551 2.00520157 0.3012377 2.249041 0.9002427 -0.9346424
-----------------------------------------------------------------------
> x[,c(1,3)] #取第一列和第三列
[,1] [,2]
[1,] -1.15665512 0.3012377
[2,] 0.32517047 1.6847352
[3,] -0.08171387 -0.3943626
[4,] -0.17095056 -0.1293965
-----------------------------------------------------------------------
> x[2,1] #取第二行第一个元素
[1] 0.3251705
> x[x[,1]>0,1] #取第一列中大于0的元素
[1] 0.3251705
-----------------------------------------------------------------------
> sum(x[,1]>0) #第一列中大于0的元素的个数
[1] 1
> sum(x[,1]<=0) #第一列中小于等于0的元素的个数
[1] 3
-----------------------------------------------------------------------
> x[,-c(1,3)] #x去掉第一列和第三列
[,1] [,2] [,3] [,4]
[1,] 2.00520157 2.2490408 0.9002427 -0.93464240
[2,] 0.01256269 -1.4311658 -1.5370565 -0.97347666
[3,] 0.48406661 0.1570139 -0.2758359 -2.15406500
[4,] 0.07226580 -0.3290969 0.6597828 0.06926688
-----------------------------------------------------------------------
> x[-2,-c(1,3)] #x去掉第二行,第一列以及第三列
[,1] [,2] [,3] [,4]
[1,] 2.0052016 2.2490408 0.9002427 -0.93464240
[2,] 0.4840666 0.1570139 -0.2758359 -2.15406500
[3,] 0.0722658 -0.3290969 0.6597828 0.06926688
通过以下命令可以给矩阵的行列命名。
> x = matrix(1:12, nrow = 3, dimnames = list(c("I","II","III"),paste("X",1:4,sep="")))
> x
X1 X2 X3 X4
I 1 4 7 10
II 2 5 8 11
III 3 6 9 12
> x = matrix(1:12, nrow=3, dimnames=list(c("I","II","III"),paste("X",1:4,sep="_")))
> x
X_1 X_2 X_3 X_4
I 1 4 7 10
II 2 5 8 11
III 3 6 9 12
在R语言中,数据框(dataframe)组织数据的结构与矩阵相似,但是其各列的数据类型可以不相同。
一般数据框的每列是一个变量,每行是一个观测样本。虽然,数据框内不同的列可以是不同的数据模式,但是数据框内每列的长度必须相同。
> x = matrix(1:6,2,3)
> x = as.data.frame(x)
> x
V1 V2 V3
1 1 3 5
2 2 4 6
-----------------------------------------------------------------------
> x$V2 #查看V2的值
[1] 3 4
> mode(x) #查看x储存类型(注意数据库其实是列表的一种特殊情况)
[1] "list"
> class(x) #查看x的类别(注意和mode的区别)
[1] "data.frame"
> objects() #objects()用于显示目前在R中存储的变量的名称
[1] "a" "A1" "A2" "cpr" "e" "eor" "i" "p" "si" "w" "x" "y"
> objects(x) #显示目前在x中存储的变量的名称
[1] "V1" "V2" "V3"
-----------------------------------------------------------------------
> attributes(x) #查看数据框x的各种属性
$names #列名
[1] "V1" "V2" "V3"
$class #x的数据种类
[1] "data.frame"
$row.names #x的行名
[1] 1 2
现在构造一个具体的数据框。(矩阵x与上面相同。)
> names(x)=c("TOYOTA","GM","HUNDA")
> row.names(x)=c("2001","2002")
> x
TOYOTA GM HUNDA
2001 1 3 5
2002 2 4 6
> x$GM
[1] 3 4
#在2.14的基础上,用attach指令对数据实现路径设定或绑定
> attach(x)
The following objects are masked from x (pos = 3):
GM, HUNDA, TOYOTA
> GM
[1] 3 4
#而detach就会撤销路径
> detach(x)
> GM
错误: 找不到对象'GM'
输入data()
,可以查看R自带的数据集。
在这里输入data(CO2)
就可以导入CO2这个数据集。
查看数据集只需要再输入CO2
要存取其他功能包中的数据,可以使用package参数
data(package=“blabla”)
data(Puromycin, package = “blabla”)
如果某个功能包已经由函数library()挂接了,那么它的数据集也自动的包含在了搜索路径中。所以
library(nls)
data()
data(Puromycin)
将列出当前已挂接的所有数据集(至少包含base和nls)。并且从第一个能够找到puromycin的功能包中载入这个数据集。