【R语言学习系列1】- 基础篇

一.安装

按照自己的电脑的版本进行下载即可。

  1. R语言安装包
  2. R语言IDE:Rstudio

二. 小试牛刀

我用的mac,打开命令终端,输入R即可进入到对应的R语言终端进行编码。下面重点说一下基本的R语言的命令

2.1 数学运算和向量

  1. 命令提示:两个问号+关键词
??plotting

上面这条命令就查看了关于画图的所有的命令

  1. 命令查看:问号+双引号(引号中间是要查询的命令)
?"mean"

上面这条命令就查看了mean这个函数的作用
用q退出查看情况

  1. 查看范例:example(命令)q
example(plot)

4.下面是一些科学计算的命令,统一介绍

+ - * /  #最简单的加减乘除

通过冒号运算符创建一个从某个数值开始到另一个数值结束的序列
通过c函数可以将产生的序列链接到一起

1:5
c(1:5)
1:5+1:5

注意尽量使用向量化参数,尽量少使用for函数

sum(1:5) 计算加和
median(1:5) 计算中位数

需要注意一个事情,在很多情况下,要处理的参数是统一作为向量进行处理的,所以如下两个命令结果是不一样的

median(1,2,3)
median(c(1,2,3))

前者结果是1,后者结果是2,原因在于median的参数的具体定义是

median(x,na.rm=False,...)

如果是第一种,那么我们的数据x仅仅是1,2对应na.rm,3对应后面的可变变量。
如果是第二种,那么123对应于我们要处理的X
所以一定要注意,我们函数的接收对象是向量,而不是单纯的单值

c(1,2,3,4)-2 #向量的每个元素都会减去2
-2:2*-2:2    # 对应位置会相乘
-2:2*-2:7   # 长的对象长度要是短的对象长度的整数倍
(1:3)^2 # 乘方
1:10 / 3 # 除法
1:10 %% 3 # 取余数
sin(pi/4) 
sin(c(pi/4,pi/2))  #sin cos tan asin acos atan log exp 等

比较符号

== > < >= <= !=

比较符号也可以向量化

c(1,2,3) == 2
exp(1:5) <=100

但是由于计算机内部存储数据的问题

sqrt(2)^2 == 2 # 结果是false

所以R语言专门提供了一个all.equal函数,它提供了一个容忍度,当小于那个容忍度的时候误差将会被忽略

all.equal(sqrt(2)^2,2)

2.2 变量赋值

# 下面两种赋值方式都可以,书上推荐第一种,但是我比较喜欢第二种
x <- 1:5
y = 1:5
c <<- 3 #设置全局变量

2.3 特殊数字

  1. Inf:正无穷
  2. -Inf:负无穷
  3. NaN:不是一个数字(not a number),意味着我们的计算没有意义或者无法正确执行
  4. NA:不可用(not available)并代表缺失值
Inf+1
Inf-1
Inf-Inf
1/Inf
Inf/1
Inf/Inf
log(inf)
NA+1
NA+Inf
NA*5

可以通过函数来进行判断,NaN和NA既不是有限值也不是无限值,NaN代表缺失值

x <- c(0,Inf,-Inf,NaN,NA)
is.nan(x)
is
.na(x)
is.infinite(x)
is.finite(x)

2.4 逻辑向量

! 非
& 与
| 或

三. 初窥门径

3.1 查看判断数据类型

# 数字类型就以下三类
class(1:3) # integer 整型
class(6)  # numeric  浮点型
class(2.3)  # numberic
class(3+1i)  # complex 复数
# 字符型
class("hello") # character
# 布尔型
class(FALSE)  TRUE # logical

查看系统中对于类型的判断

ls(pattern = "^is",baseenv())
is.numeric(1) # 判断1是不是浮点型
is.logical(FALSE)
is.integer(1:3)

打印出数据方便检查变量,尤其是通过终端进行代码编写的时候

x <- 1:3
print(x)

数据的检视

num <- runif(30) #加载数据或者产生数据:产生30个0到1之间均匀分布的随机数
summary(num) # 数据总体情况
head(num)   # 前几行数据
str(num)    # 显示对象结构

3.2 向量

vector 函数可以创建一个指定类型和长度的矢量,其中的值可以是0,FALSE,空字符串,或者nothing

vector("numeric",5)
vector("complex",2)
vector("logical",3)
vector("character",5)

seq.int可以创建一个序列,序列的范围可以由两个数字指定

seq.int(1,3) #等价于1:3
seq.int(1,10,3) # 1,4,7,10 最后一个是步长
seq_len(3) #1,2,3
seq_len(0) # integer(0)

获得序列长度

length(1:5)
x<-1:6
length(x)

可以给R向量的每一个元素命名

# 可以在初始化的时候进行命名
x <- c(apple=1,banana=2,3)
x
x[1]
class(x) # numeric
# 也可以在向量创建之后用names函数为元素添加名字
x <- 1:3
names(x)<-("a","b","")
snames(x)
x

部分元素获取:切片slice

x<-1:5
x[c(1,3,5)] #正数序列:得到对应位置元素
x[c(-2,-4)] #负数,要去掉当前位置的元素
x[c(TRUE,FALSE,TRUE,FALSE,TRUE)] # 对应True得到,反之去掉。
x[seq.int(2,4)]
x[seq.int(4,2)]
x[seq.int(1,5,2)]

当不同长度的向量配合运算的时候,短的向量会配合长的向量。

1:5+1
1:3+1:6 # 2,4,6,5,7,9 实际上1:3重复了两次

但是这种情况不利于代码的阅读

rep(1:3,2) # 1:3 重复两次
rep(1:3,each =2) # 每个元素重复两次
rep(1:3,times=1:3) # 对应位置元素重复time次
rep(1:3,length.out = 5) # 重复直到达到对应的长度

3.3 矩阵 数组

# 数组
x <- array(1:12,c(3,4))
x[1,] # 查看第一行
x[,1]  # 查看第一列
dim(x) #查看维度

#矩阵
y <- matrix(1:12,nrow = 4)
y
y[1,]
y[,1]
dim(y)
nrow(y)
ncol(y)

3.4 控制流

# if语句
if(TRUE) print("yes")
# if esle
x<-7
if(x>10){
    print("x>10")
}else{
    print("x<=10")
}
# if-else if-else
x<-7
if(x>10){
    print("x>10")
}else if(x>5){
    print("x>5")
}else{
    print("x<=5")
}
# for循环
for(i in 1:10)
    print(i)
# while 循环
i<-0
while(i<10){
    print(i)
    i=i+1
 }

四. 登堂入室

4.1 读取数据

  1. 读取R语言内置的数据
data() #查看所有的数据文件,
# 直接使用名字即可加载,这里以BOD为例进行讲解
BOD #全部展示数据
head(BOD)   #前几条数据
summary(BOD)    #简单的数据分析
  1. 读取CSV文件
x <- read.csv(file="/Users/liqingwen/workplace/Rspace/mdata/test.csv",header=TRUE)
x
head(x)
summary(x)
dim(x)
rownames(x)
colnames(x)
x[1:3,] #前三行
x[,2] # 第2列
# 写数据到csv文件中,
write.csv(x=mdata, file="stu_bak.csv", row.names=F, quote=F)
  1. 读取excel文件
另存为csv文件,然后用第一种方式来处理。

4.2 处理数据

  1. 添加新列
# 添加新的一列,数据为91:95
x$grades <- 91:95
# 添加新的一列,
x$grade1<-x$grade+1
  1. 删除新列
# 不显示第二列
x[,-2]
# 去掉第一行
x[-1,]

之后用到其他地方的话,继续更新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容