实验一 R语言安装以及基本命令、表达式、数学公式与特殊符号等操作

一、基本操作

  1. 执行外部R程序
source( "hello.R" ) # 执行外部文件中的R程序
## [1] "hello R!"
  1. 定位输出
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
  1. 数据的保持与对象的擦除
objects() # 显示当前存储在R中的对象
## [1] "x"
rm( x ) # 擦除对象
objects()
## character(0)
所有在一个R任务中被创建的对象都可以在文件中被永久保存,并在其它的R任务中被使用。在每个R任务结束时用户都有机会保存当前有效的所有对象。如果用户这样做的话,对象将被写入当前目录一个名为.RData(点击平台的菜单栏或工具栏里面的“保存”按钮)。当R被再次启动时R会从这个文件中再载入workspace。同时相关的命令记录也被载入。
所以,推荐大家在用R进行不同的分析时分别使用不同的工作目录。
  1. R中的包 install.packages( “包名”,“包安装位置(可不设置,默认为library目录)” ) install.packages( “本地包位置” ) # 加载本地包
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
  1. 语句组、循环和条件操作 5.1 选择结构
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

二、R语言基本命令、表达式

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"