对象的保持与清除
R所创建、操作的实体都是对象,对象可以使变量、数组、字符串、函数以及这些这些元素组成的其他结构。
可以使用objects()显示目前R中存储的所有对象名称。当前存储的所有对象组合称为workspace。
> objects()
[1] "Distance" "Speed"
清除对象可以使用rm()命令
> rm(Speed)#清除指定对象,多个用“,”隔开
> objects()
[1] "Distance"
> rm(list=ls())#清除当前工作空间中的所有对象
> objects()
character(0)
在每一个R任务结束后,用户都有机会将任务中的操作对象永久保存,如果用户选择保存,那么对象将会被存储在一个.RData的文件中,则这些对象可以在R重启后再次被载入到workspace中 ,相关命令记录也将被载入。所以推荐大家在使用R做不同分析的时候,使用不同的工作目录。
数据类型
数值型(numeric) | 1,1.2,3.1415926 |
复数型(complex) | 1+2i |
字符型(character) | ‘A’/ “hello world!” |
逻辑型(logical) | true/false |
数据对象
向量(vector)
矩阵(matrix)
数组(array)是向量在多维情况下的一般形式。
数据框(data frame) 是一种与矩阵相似的结构,其中的列可以是不同的数据类型。可以把数据框看作一种数据"矩阵",它的每行是一个观测单位(case),而且(可能)同时包含数值型和分类的变量。
因子(factors) 提供了一种处理分类数据的更简单的方式。
列表(list):是一些对象的集合,它是R中较复杂的数据形式,一个列表中可以包含若干向量、矩阵,数据框等。
函数( function):能够在R的workspace中存储的对象,可以通过函数来扩展R的功能。
向量
向量赋值
> 1:10 #产生1到10的递增序列
[1] 1 2 3 4 5 6 7 8 9 10
> seq(from=1,to=10,by=1)#seq()函数也可以生成序列
[1] 1 2 3 4 5 6 7 8 9 10
> 1:10+1
[1] 2 3 4 5 6 7 8 9 10 11
> 1:10*2+1
[1] 3 5 7 9 11 13 15 17 19 21
> a<-1:10*2+1 #变量a用于保存序列
> a
[1] 3 5 7 9 11 13 15 17 19 21
> a[a<5]
[1] 3
> a[1:3]
[1] 3 5 7
> a[c(1,2)]
[1] 3 5
#生成向量x1 x2
> x1<-c(1:5)
> x2<-c(2,4,6,8)
> x1;x2
[1] 1 2 3 4 5
[1] 2 4 6 8
> 1/x1 #打印倒数
[1] 1.0000000 0.5000000 0.3333333 0.2500000 0.2000000
向量运算
> cbind(x1,x2)
x1 x2
[1,] 1 2
[2,] 2 4
[3,] 3 6
[4,] 4 8
[5,] 5 10
> y1<-cbind(x1,x2)
> y1[1,]
x1 x2
1 2
> y1[x1]
[1] 1 2 3 4 5
> View(y1)
> y2<-rbind(x1,x2)
View(y1)可以看到,其中需要注意x1和 x2的元素个数需要相同。
> x3<-c(1:50)
> mode(x3)
[1] "numeric"
> sum(x3)#求和
[1] 1275
> max(x3)
[1] 50
> min(x3)
[1] 1
> length(x3)#x3的长度
[1] 50
> prod(x3)#乘积
[1] 3.041409e+64
> mean(x3);var(x3)#均值和方差
[1] 25.5
[1] 212.5
> x1;x2;pmax(x1,x2)
[1] 1 2 3 4 5
[1] 2 4 6 8 10
[1] 2 4 6 8 10
> x1;x2;pmin(x1,x2)
[1] 1 2 3 4 5
[1] 2 4 6 8 10
[1] 1 2 3 4 5
> sort(x1)
[1] 1 2 3 4 5
> sort(x1,decreasing=T)
[1] 5 4 3 2 1
逻辑向量
逻辑向量的元素可以是TRUE、FALSE或NA(no available),为避免被用户定义的变量覆盖,最好不要用简写T/F。
> x1;temp<-x1>3 #逻辑操作符包括<, <=, >, >=,完全相等==和不等于!=,与或非分别为&, |, !
[1] 1 2 3 4 5
> temp
[1] FALSE FALSE FALSE TRUE TRUE
字符向量
> s1<-c("a","b","c","d")
> s1
[1] "a" "b" "c" "d"
> s2<-paste(c("a","b"),1:10,sep=";")
> s2
[1] "a;1" "b;2" "a;3" "b;4" "a;5" "b;6" "a;7"
[8] "b;8" "a;9" "b;10"
which()函数
which()函数可以显示符合条件的元素的索引。
> x4<-c(2,3,5,8,1,9,0,2,3,2)
> x4
[1] 2 3 5 8 1 9 0 2 3 2
> which(x4==2)
[1] 1 8 10
> which(x4<4 & x4>2)
[1] 2 9
runif()函数
runif()函数随机产生0~1之间的数,不含边界。
runif(n,min=0,max=1)
> x5<-runif(5,min=1,max=10)
> x5
[1] 3.507915 6.188848 9.554100 1.779592 5.157316
rev()函数
rev()函数可以实现向量或矩阵的翻转。
> x1;rev(x1)#实现向量的翻转
[1] 1 2 3 4 5
[1] 5 4 3 2 1