R语言入门--第一节(基础知识)

1、熟悉语句

  • R的赋值符号为<- ,也可以用 =(但是后者不是标准语法,专业人员不推荐使用,但我觉得=更方便,只要打一个字符毕竟 -.-)

回顾:目前已经改过来了哈,使用<-为主。快捷键Alt加短横键可一次输出,也很方便。

  • 注释由#开头,在它之后的文本都会被忽略(方便打草稿,做记录等等)
x <- rnorm(5)  #即创建了一个名为x的向量对象,包含5个来自标准正态分布的随机偏差

2、一些帮助命令

install.packages("vcd")
data() #列出当前已加载包中所含有的所有可用示例数据集
?dplyr   #关于该包的简介
??mutate    #以mutate为关键词,搜索本地帮助文档 
#mutate是dplyr包的一个函数(包首先要加载),帮助栏左上角可以看出。

3、工作空间的管理

  • 工作目录(work directory)就是用来读取文件和存储运算结果的默认目录
  • 注意:如果需要读入一个不在当前工作目录下的文件,需要调用语句写明完整的路径。记得要加引号!
getwd()  #可以查看当前工作目录
setwd('新路径')  #可更改工作目录位置

options()  #显示当前所有选项
options("repos")    #显示某一特定选项  或者 options()$repos
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))    
options(digits=3)  
#修改某一特定选项

history()       #默认显示25条历史命令
savehistory("myhist.R")    #将历史命令保存名为 mylist 的文件(默认保存至工作目录)
loadhistory("myhist.R")     #载入历史命令文件到右上角 history 栏中
#R程序卡住时,点击键ctrl+shfit+esc键,选择你要关闭的程序,结束任务,即可强制关闭程序 

save.image("li.RData")    #保存工作空间到当前会话中
#相当于快照,除了一般退出可以自动保存,也可自己保存一个时间点的工作状态。
save(objectlist,file="temp.Rdata")   #
# object 可以是一个或多个对象,单独保存,而不是整个工作台内容
load("li.RData")         #读取一个工作空间到当前会话中   

4、图形输出命令

  • 一般生成图片则显示在右下角区域,但很多时候需要保存为图片文件。
  • R提供很多格式普适的保存图片命令(一些绘图包也提供自己的下载图片函数)
data("mtcars")
#三步走
png("test.png") #第一步
plot(mtcars$mpg,mtcars$cyl)  #第二步
dev.off()  #第三步
  • 此外还有其它很多格式
jpeg("filename.jpg")   #输出JPEG文件
bmp("filename.bmp")   #输出BMP文件
pdf("filename.pdf")   #输出pdf文件,大图推荐

5、关于R包(package)的常用命令

  • 储存包的目录称为库(library)
  • 使用包的函数之前,先要安装,再要加载
.libPaths()    #显示库所在的位置
library()      #显示库中有哪些包
search()       #显示当前哪些包被加载,可以使用
install.packages("gclus")      #安装包,需要加引号
installed.packages()           #列出安装的包,版本号、依赖关系等信息
library(gclus)                 #使用前需要加载包,不用加引号
update.packages()    #更新包

6、R的数据

6.1 数据框与因子

  • 数据框(data frame)是R中用于常用的存储数据的一种结构:列表示变量,行表示观测。
    因子(factor)是名义型变量或有序型变量,他们在R中被特殊的存储和处理

对象(object)是指可以赋值给变量的任何事物,包括向量、数据结构,函数。

patientID <- c(1, 2, 3, 4) #行/实例标识符(行名),可由函数rownames指定
age <- c(25, 34, 28, 52)       #连续性变量
diabetes <- c("Type1", "Type2", "Type1", "Type1")   #类别/名义型变量,可为因子
status <- c("Poor", "Improved", "Excellent", "Poor") #有序型变量,可为因子
patientdata <- data.frame(patientID, age, diabetes, status)
#创建数据框时,会自动把名义型变量与有序型变量转换为因子,储存为整数型 1、2、3.....
str(patientdata)
1.png
str(diabetes)     #依然发现仍为字符串型
diabetes=factor(diabetes)      #利用factor函数可将字符串转变为因子

如上,将糖尿病类型转换为无序因子类型,如需设置有序型因子,需加ordered =levels = c()两个参数

status=factor(status,ordered = TRUE, levels=c("poor","Improved","Excellent"))     
#levels可以覆盖默认排序(字母排序) ,这对按类别绘图时的顺序很关键。

特殊情况:比如性别变量中用数值型变量0、1表示二分类变量;如需编码为因子,要使用levels和label两个参数
补充:让因子的顺序与初始数据的顺序保持一致,可使用unique()函数,例如f1 <- factor(x1, levels = unique(x1))

gender=c(1,0,0,1,0,1,1,0)
gender <- factor(gender,levels=c(0,1),labels = c("male","female"))
gender

6.2 数据框的取值

patientdata[1:2]   #取第一到二列
patientdata[c("diabetes","status")]
patientdata$age
summary(mtcars$mpg)
plot(mtcars$mpg,mtcars$disp) #比较麻烦
## 两个简便方法
attach(mtcars)      #tips1 "attach"
summary(mpg)
plot(mpg,disp)

detach(mtcars)      #tips2 "with"
with(mtcars,{
    print(summary(mpg))
    plot(mpg,disp)
    })

#删除指定列
patientdata=subset(patientdata,select=-age)
patientdata=patientdata[,-1]  #删除第一列

6.3 向量、矩阵、列表

  • 向量用于储存数值型、字符型,逻辑型的一维数据。使用c() 创建
    注意:单个向量必须拥有相同的数据类型。
a=c(1,6,15,19)
#向量的取值
a[3]
a[c(3,5)]
a[2:6]
  • 矩阵matrix是维数等于2的数组,数据类型也必须一致;这是与data frame表最大的区别。
a=c(1,6,15,19,32,69)
rnames   <- c("R1", "R2")   #行名
cnames   <- c("C1", "C2", "C3")   #列名
mymatrix <- matrix(a, nrow=2, ncol=3, byrow=TRUE,     
                   dimnames=list(rnames, cnames))  
#byrow=TRUE 按行填充,默认为按列填充。


#取值
mymatrix[2,]  #取第二行
mymatrix[,3]  #取第三列
mymatrix[2,3] 
mymatrix[2,c(2,3)]
mymatrix[c(T,F),4] #默认循环
mymatrix[,c(T,T,F,F,F)] # 在大数据时,会比较方便
mymatrix[,c(T,F)]  
  • 列表(list)为一些对象的有序集合,可能是若干向量、矩阵,数据框,甚至其它列表的组合。
#建立列表
mylist <- list(a,b,c,d)   #可为任何数据类型
mylist
mylist[[2]]   #取列表中第二个对象

#灵活创建--为列表元素命名
mylist <- list(title = a,b,c,end = d)
mylist
#可按名寻对象
mylist[["title"]] #mytitle[[1]]
mylist$title  #仅对命名的元素有效

注意列表的取子集方式,list[1]提取的本质还是一个列表;而list[[1]]这种方式会从列表中删除一个层次等级,使用$按名提取也是同样的效果。这个区别很重要~

7、数据导入与初探索

1、 手动输入,适用于小数据输入

mydata <- data.frame()
mydata <- edit(mydata) 
#fix(mydata)

2、 read.table()将带分隔符的文本文件(如逗号为分隔符的CSV文件)转为dataframe格式数据表,从而导入到R中。

mydata=read.table("file.csv",header=TRUE,
                    row.names="nameID",sep=",")
#header=TRUE,表示第一行为列名
#row.names  设置行名;此外col.names也可以单独设置
#修改列名,直接赋值即可
colnames(mydata)=c('Geneid','A1','A2','A3','B1','B2','B3')

分隔符默认为 sep=" " ,代表一个/多个空格,制表符,换行或回车;
sep="\t" 读取使用制表符来分割行内数据

read.table()函数其它常用参数

  • stringsAsFactors 表示字符型向量是否转化为因子,默认是TRUE。处理大数据设置为FALSE便捷
  • skip 用于数据前跳过的行的数目,适用于开头有注释的文件。
  • na.strings将特定字符转为na值,例如na.strings=c("9","?")
  • ?read.table可知还有read.csv等更便捷、直接的方法;
  • 导入excel文件,推荐方式为将excel文件另存为csv文件,再按上述方法导入。
  • 其它方法或导入其它数据目前对于我不常用,不做介绍 P35

补充:相反的,也可把R中的数据框或者矩阵等导出为CSV、excel等格式,方法示例如下:

 #导出逗号分隔符(csv)文本文件
write.table(mydata, "mydata.txt", sep=",") 
# 默认字符串放在引号中的,缺失值用NA表示

#导出excel
#注意该包应该是需要Java环境,因此需要电脑下载安装jdk
library(xlsx)
write.xlsx(mydata, "mydata.xlsx")
# 默认变量名为电子表格头部,行名放在第一列

补充两点:
(1)excel目前有两种常见后缀 .xls.xlsx。可以简单理解后者是前者的升级版。.xls在所有版本office都能打开,而.xlsx只能在2007年以后版本的office才能打开;
(2)一般保存,建议逗号分隔符的.csv格式;而如果是别人给的数据是excel文件,推荐使用readxlR包读取,主要用到三个函数read_excel()read_xls()read_xlsx()

3、使用的数据初探索函数

length()    #显示元素数量
dim()  #维度
str()   #结构
class()   #类型
head()    #前六行,tail则为后六行
ls()    #显示当前对象列表
rm(list=ls())   #清空所有对象

寒假自学R语言的生信小白

教材参考《R语言实战(第2版)》

你可能感兴趣的:(R语言入门--第一节(基础知识))