source( "hello.R" ) # 执行外部文件中的R程序
## [1] "hello R!"
sink( "result_hello.txt" ) # 将后续输出存储到文件
x <- 1:10
x
## [1] 1 2 3 4 5 6 7 8 9 10
sink() # 输出重新定位到控制台
x # 打印在屏幕上
## [1] 1 2 3 4 5 6 7 8 9 10
objects() # 显示当前存储在R中的对象
## [1] "x"
rm( x ) # 擦除对象
objects()
## character(0)
所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。在每个R任务结束时用户都有机会保存当前有效的所有对象。如果用户这样做的话,对象将被写入当前目录一个名为.RData(点击平台的菜单栏或工具栏里面的“保存”按钮)。当R被再次启动时R会从这个文件中再载入workspace。同时相关的命令记录也被载入。
所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
library("MASS") # 加载包:R中的包在使用前必须加载
library( help=MASS ) # 查看包帮助
library() # 查看安装的所有包(部分未加载)
find.package() # 查看当前环境中加载的包【.path.package()适用于低版本】
## [1] "D:/software/Helper/R/R-3.2.4revised/library/MASS"
## [2] "D:/software/Helper/R/R-3.2.4revised/library/stats"
## [3] "D:/software/Helper/R/R-3.2.4revised/library/graphics"
## [4] "D:/software/Helper/R/R-3.2.4revised/library/grDevices"
## [5] "D:/software/Helper/R/R-3.2.4revised/library/utils"
## [6] "D:/software/Helper/R/R-3.2.4revised/library/datasets"
## [7] "D:/software/Helper/R/R-3.2.4revised/library/methods"
## [8] "D:/software/Helper/R/R-32~1.4RE/library/base"
detach( package:MASS ) # 把包移出内存
find.package()
## [1] "D:/software/Helper/R/R-3.2.4revised/library/stats"
## [2] "D:/software/Helper/R/R-3.2.4revised/library/graphics"
## [3] "D:/software/Helper/R/R-3.2.4revised/library/grDevices"
## [4] "D:/software/Helper/R/R-3.2.4revised/library/utils"
## [5] "D:/software/Helper/R/R-3.2.4revised/library/datasets"
## [6] "D:/software/Helper/R/R-3.2.4revised/library/methods"
## [7] "D:/software/Helper/R/R-32~1.4RE/library/base"
data( package="MASS" ) # 查看包中的数据集
data( survey ,package="MASS" ) # 加载survey数据集
head( survey)
## Sex Wr.Hnd NW.Hnd W.Hnd Fold Pulse Clap Exer Smoke Height
## 1 Female 18.5 18.0 Right R on L 92 Left Some Never 173.00
## 2 Male 19.5 20.5 Left R on L 104 Left None Regul 177.80
## 3 Male 18.0 13.3 Right L on R 87 Neither None Occas NA
## 4 Male 18.8 18.9 Right R on L NA Neither None Never 160.00
## 5 Male 20.0 20.0 Right Neither 35 Right Some Never 165.00
## 6 Female 18.0 17.7 Right L on R 64 Right Some Never 172.72
## M.I Age
## 1 Metric 18.250
## 2 Imperial 17.583
## 3 <NA> 16.917
## 4 Metric 20.333
## 5 Metric 23.667
## 6 Imperial 21.000
a<-5
ifelse( a>5,x<-1:5,x<-5:10 ) # 等价于if...else...结构
## [1] 5
5.2 循环结构
for( var in x ){
print(var); # 这里不像perl,var的改变不会改变x
var=var+1;
}
## [1] 5
## [1] 6
## [1] 7
## [1] 8
## [1] 9
## [1] 10
x
## [1] 5 6 7 8 9 10
i =0
while( i<4 ){
print(i);
i=i+1;
}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
1.获取帮助
help( "solve" );
## starting httpd help server ...
## done
?solve
example( "*" ) # 获取对象使用例子
##
## *> x <- -1:12
##
## *> x + 1
## [1] 0 1 2 3 4 5 6 7 8 9 10 11 12 13
##
## *> 2 * x + 3
## [1] 1 3 5 7 9 11 13 15 17 19 21 23 25 27
##
## *> x %% 2 #-- is periodic
## [1] 1 0 1 0 1 0 1 0 1 0 1 0 1 0
##
## *> x %/% 5
## [1] -1 0 0 0 0 0 1 1 1 1 1 2 2 2
2.赋值
x <- 1:10 # 等价于assign
assign( "y",1:10 )
x
## [1] 1 2 3 4 5 6 7 8 9 10
y
## [1] 1 2 3 4 5 6 7 8 9 10
3.生成序列
seq( from=1,to=10,by=6) # seq(1,10,by=6)
## [1] 1 7
seq( from=1,to=10,length.out=7)
## [1] 1.0 2.5 4.0 5.5 7.0 8.5 10.0
rep(2,times=10) # rep(1,10)
## [1] 2 2 2 2 2 2 2 2 2 2
rep(x,2)
## [1] 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
paste("X","Y","Z",1:6,sep="-") # paste()可以接受任意个参数,并从它们中逐个取出字符并连成字符串,形成的字符串的个数与参数中最长字符串的长度相同。
## [1] "X-Y-Z-1" "X-Y-Z-2" "X-Y-Z-3" "X-Y-Z-4" "X-Y-Z-5" "X-Y-Z-6"
paste(c("X","Y","Z"),1:6,sep="-")
## [1] "X-1" "Y-2" "Z-3" "X-4" "Y-5" "Z-6"
4.R中的特殊字符 NA: 缺失数据 NaN: 无意义的数,比如sqrt(-2) Inf: 正无穷大 -Inf: 负无穷大
x <- c(1,NA,NaN,Inf,-Inf,2)
is.na(x) # 注意结果NaN为TRUE
## [1] FALSE TRUE TRUE FALSE FALSE FALSE
is.nan(x)
## [1] FALSE FALSE TRUE FALSE FALSE FALSE
5.向量
x<-1:3
x[rep(c(1,1,1,3,3,3),times=1)] # c(1,1,1,3,3,3)为x索引
## [1] 1 1 1 3 3 3
x[-2] # 剔除x[2]返回结果,但是x不变
## [1] 1 3
6.字符串的向量
a <- 1:3
names(a) <-c("A","B","C")
a
## A B C
## 1 2 3
a[c("A","B")]
## A B
## 1 2
a[a<4]<-100 # 修改子集
a
## A B C
## 100 100 100
7.常用函数 ①log, exp, sin, cos, tan,sqrt等; ②max和min的作用是选出所给向量中最大的或最小的元素; ③range函数的值是一个长度为2的向量,即c(min(x),max(x)) ④length(x)返回了向量x中元素的个数,也就是x的长度。 ⑤sum(x)给出了x中所有元素的总和 ⑥prod(x)给出x中所有元素的乘积; ⑦mean(x)和var(x),分别计算样本均值和样本方差 ⑧var()的参数是一个np的矩阵,那么函数的值是一个pp的样本协方差矩阵,认为每行是一个p变量的样本向量 ⑨sort(x)返回一个与x具有相同长度的向量,其中的元素按招升序排列。还有其他更灵活的排序功能(参见order()和sort.list()) ⑩pmax和pmin将返回一个与最长的向量长度相等的向量,向量中的元素由参数中所有向量在相应位置的最大值(最小值)组成
#-- 对数 --#
rm(list=ls()) #清除变量
x<-exp(1)
log(x) #自然对数
## [1] 1
log(x^5,exp(1)) # 相同logb(x^3,exp(1)),第二项表示底数
## [1] 5
log10(10)
## [1] 1
log2(2)
## [1] 1
sqrt(4) #4^(1/2)
## [1] 2
#-- 三角函数 --#
y <- sin(pi/2) # 弧度而非角度值
y
## [1] 1
asin( y )
## [1] 1.570796
z <- 1:10
length(z)
## [1] 10
nchar("xyz") # 计算字符个数
## [1] 3
min(z) # 最小值
## [1] 1
max(z) # 最大值
## [1] 10
range(z) # (min,max)
## [1] 1 10
z <- c(NA,z)
range(z) # NA或NaN时,注意结果
## [1] NA NA
range(z,na.rm=TRUE)
## [1] 1 10
z <-c(Inf,-Inf,z)
range(z,na.rm=TRUE ) #加入Inf时的结果
## [1] -Inf Inf
range(z,finite=TRUE) # finiter(有限的)
## [1] 1 10
z
## [1] Inf -Inf NA 1 2 3 4 5 6 7 8 9 10
sum(z)
## [1] NaN
sum(z[z!=Inf & z!=-Inf & !is.na(z)])
## [1] 55
prod(z[z!=Inf & z!=-Inf & !is.na(z)])
## [1] 3628800
mean(z[z!=Inf & z!=-Inf & !is.na(z)])
## [1] 5.5
var(z[z!=Inf & z!=-Inf & !is.na(z)])
## [1] 9.166667
sort(z)
## [1] -Inf 1 2 3 4 5 6 7 8 9 10 Inf
z # sort不会影响本身值
## [1] Inf -Inf NA 1 2 3 4 5 6 7 8 9 10
rm(list=ls())
x<-1:3
y<-2:5
pmax(x,y) # R中的循环法则
## Warning in pmax(x, y): 参数值将数据略微回收
## [1] 2 3 4 5
sqrt(-9+0i) # 复数
## [1] 0+3i
8.其它函数
rm(list=ls())
x<-c(1.5,1.4)
round(x,0) # 四舍五入,保留小数点后“0”位
## [1] 2 1
round(x,-1)
## [1] 0 0
x<-pi*10^5
x
## [1] 314159.3
signif(x,digits=2) # signif(x,2) 科学计数
## [1] 310000
y<-c(1.4,1.5,1.6)
trunc(y)
## [1] 1 1 1
floor(y)
## [1] 1 1 1
ceiling(y)
## [1] 2 2 2
9.字符串处理
x<-"huangjiashun"
nchar(x)
## [1] 12
substr(x,1,5)
## [1] "huang"