R语言学习笔记

R语言学习笔记

  • 一.准备环境
  • 二.认识控制台
  • 三.R包
  • 四.数据结构
    • 1.向量Vector
      • 1.1创建向量
      • 1.2访问向量中的数据
      • 1.3向量的循环补齐
    • 2.矩阵matrix
      • 2.1创建矩阵
      • 2.2访问矩阵中的数据
    • 3数组Array
      • 3.1创建数组
      • 3.2访问数组中的数据
    • 4.数据框Dataframe
      • 4.1创建数据框
      • 4.2访问数据框中的数据
    • 5因子Factor
      • 5.1创建因子
      • 5.2访问因子中的数据
    • 6.列表List
      • 6.1创建列表
      • 6.2访问列表中的数据
  • 五.获取表达矩阵
  • 整理探针转化文件

一.准备环境

下载R语言和Rtools,https://mirrors.tuna.tsinghua.edu.cn/CRAN/
下载Rstudio,https://posit.co/downloads/

二.认识控制台

Rstudio界面介绍

三.R包

R包并不是凭空产生的,都是作者编译好函数后封装成包,然后将其上传到某个平台储存。目前,R包主要都可以从这三大平台下载,分别是CRAN官网平台,Bioconductor生信平台及Github第三方平台。

简单介绍一下三个平台。
1.CRAN存储了R最新版本的代码和文档的服务器 。这是R语言官方平台,市面上常用的R包以及已经功能完整度比较高的R包基本都会上传到CRAN官方平台,因此通常可以从rstudio直接用代码下载。另外,可以从官网平台下载所需压缩包,然后在本地进行安装。
2.生物信息学领域的Bioconductor平台,它提供的R包主要为基因组数据分析和注释工具。这个平台主要上传了很多关于生信技术相关的R包,如果在遇到相关R包不能从官方CRAN平台下载时,可以优先考虑从这个平台下载。
3.面向开源及私有软件的第三方平台–Github。R包的作者更愿意将其存储在该平台,因此很多时候需要在上面下载 。如果前两个平台都无法下载,这时可以考虑第三方平台github,这里包含了99%的R包。

#报错用英文显示,方便出错了取搜解决办法
Sys.setenv(LANGUAGE = "en")#安装CRAN下的包
install.packages("BiocManager")
#可能会报错:构建R包需要Rtools,但当前未安装。在继续之前,请下载并安装相应版本的Rtools
#加载BiocManager包
library(BiocManager) 
#安装Bioconductor下的包
BiocManager::install("GEOquery")

运行R包下的函数首先要加载R包

#加载GEOquery包
library(GEOquery)
##设置路径
getwd()#获取当前路径
setwd("E:\\Document\\RFiles") #用双斜杠
?getGEO #查看函数参数
##下载数据 getGPL = F 这个代表不下载平台注释文件,因为有时候网络不稳定。后面我们会在网页中下载,然后读取。
gset = getGEO('GSE12417', destdir=".",getGPL = F)

四.数据结构

数据结构
Data structure in R

1.向量Vector

向量是用于存储数值型、字符型逻辑型数据的一维数组。
两个特点 1.有序性 2.存储单一数据类型

1.1创建向量

你需要认真学习以下函数:

c(): 用来建立向量的函数;

seq(): 该函数用于创建包含from~end数值的向量;

rep(): 该函数用来创建保存重复值的向量;

length(): 用来计算向量长度的函数;

names(): 该函数用来对向量各元素命名。

我们可以用函数c()来创建向量。比如:

a <- c(1,2,3,4,6,7,9,0)#存储数值型
b <- c("哎","哟","喂啊")#存储字符型
c <- c(TRUE, FALSE, TRUE, TRUE)#存储逻辑型

如果数据类型不同,会自动转化为同一类型
可以用mode()class()函数查看对象数据类

a <- c(7,TRUE);mode(a) #结果是"numeric"
b <- c(7,"哎");mode(b) #结果是"character"
c <- c(TRUE,"哎");mode(c) #结果是"character"
d <- c(7,TRUE,"哎");mode(d) #结果是"character"

无论什么类型的数据,缺失数据总是用NA(不可用)来表示
如果想用键盘输入一些数据也是可以的,只需要直接使用默认选项的scan()函数:

z <- scan()

1.2访问向量中的数据

通过在[ ]中给出元素所在位置的数值,我们就可以访问向量中的元素了。
有4种访问方式,看下图:
访问方法
示例如下:
访问示例

#删除第二个元素
a=a[-2]

x[-1]表示将第一个元素删除。但是既然说的是负整数,如果非整数,比如x[-0.5]也不会报错,会默认删除第一个元素。x[-2.5]删除第二个元素。
空下标与零下标
x[ ]表示取x的全部元素作为子集。 这与x本身不同。
x[0]是一种少见的做法,结果返回类型相同、长度为零的向量,相当于空集。

1.3向量的循环补齐

两个向量长度相等时,向量间的运算是相应位置的数字进行运算,运算后结果返回原位置。
但如果长度不相等呢?
向量的循环补齐

R会自动循环补齐,也就是它会自动重复较短的向量,直到与另外一个向量匹配

2.矩阵matrix

R中的矩阵与数学中的矩阵一样,由指定的行(row)与列(column)构成。
和向量一样,矩阵也只能保存同种数据类型的数据

2.1创建矩阵

你需要认真学习以下函数:

matrix(): 用来建立矩阵的函数;

nrow():求矩阵的行数;

ncol(): 求矩阵的列数;

dim(): 求对象的维数;

t(): 求矩阵的转置矩阵;

solve(): 从方程a%*%x = b中求x。若不指定b, 则求a的逆矩阵。
matrix

x=matrix(c(1,3,4,2,-9,4,7,0,8),ncol=3)
x

在这里插入图片描述

给出的数据个数,要等于想要建立矩阵的元素个数才可以,否则就会报错
函数rownames()colnames()可以为矩阵指定行名和列名。比如:

rownames(x)=c("Lisa","Bob","Jay")
colnames(x)=c("成绩1","成绩2","成绩3")
x

在这里插入图片描述

当没有行名时,我们用rownames()查看行名,会返回NULL

2.2访问矩阵中的数据

借助索引或行名与列名,就可以访问矩阵中的数据
访问矩阵中的数据
与向量类似哟,如果索引是负数,则表示排除指定行或列;若索引为向量,则可以从矩阵中一次获取多个值。若想获取整行或整列,只要在指定行或列的位置上不写索引即可。

#获取第一行、第三行与第1列、第三列数据的交集
x[-2,-2]
#请使用行名、列名查出Bob的成绩2
x["Bob","成绩2"]

在这里插入图片描述

矩阵与标量、矩阵与矩阵间的四则运算如下表所示:
四则运算

除了简单的四则运算,矩阵还有特殊的运算需要函数来帮忙。

我们用t()函数来求矩阵的转置矩阵;

我们用solve(a, b)函数来为方程 a %*% x = b求解。其中 a为矩阵,b为向量或矩阵;

若不指定b,则求 a的逆矩阵。

我们用nrow()函数来求矩阵的行数;

我们用ncol()函数来求矩阵的列数;

我们用dim()函数来求矩阵的维数,当然也可以用它来设置矩阵维数。比如:

#将3*2的矩阵x改为2*3,并输出矩阵x
x <- matrix(c(1,3,4,2,-9,4), ncol=2)
x
dim(x) <- c(2,3)
x

在这里插入图片描述

3数组Array

数组与矩阵类似,但是维度可以大于2。
比如,使用矩阵可以表现 2×3 维的数据,而使用数组则可以表现 2×3×4 维的数据。
和向量、矩阵一样,数组也只能保存同种数据类型的数据

3.1创建数组

你需要认真学习以下函数:

array(): 用来建立数组的函数;

dim(): 求对象的维数。
在这里插入图片描述

array(1:12,dim=c(3,4))

在这里插入图片描述
对于4×3×2维的数组,你们也可以理解为,它创造了2个 4×3的矩阵。

x<-array(1:24,dim=c(4,3,2))

在这里插入图片描述

3.2访问数组中的数据

访问数组中数据的方法和矩阵类似,因为他们只是维数不同而已。
所以,要想访问数组元素,我们一样可以使用索引、名称等进行访问。

x[1, , ]
x[ ,1, ]
x[ , ,1]
x[1,1, ]
x[ ,1,1]
x[1, ,1]
x[1,1,1]

4.数据框Dataframe

4.1创建数据框

你需要认真学习以下函数:

data.frame(): 用来建立数据框的函数;

str(): 查看数据框结构。

由于不同的列可以包含不同模式(数值型、字符型)的数据,数据框的概念跟矩阵相比更为一般。
数据框是R中最常处理的数据结构。
数据框可以通过函数 data.frame(col1, col2, col3, …) 来创建。
其中列向量col1,col2,col3可为任何类型。
每一列数据的模式必须唯一,不过你却可以将多个模式的不同列放到一起组成数据框。
比如执行以下代码后:

patientID <- c(1, 2, 3, 4)
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)
patientdata

我们能得到结果:
在这里插入图片描述

4.2访问数据框中的数据

我们可以像之前一样使用索引来访问数据框中的元素,也可以用数据框特有的新办法来访问,那就是 $ 符号。

patientdata[1:2]
patientdata[c("diabetes", "status")]
patientdata$age

下面是运行结果:
在这里插入图片描述
函数str()可以查看数据框结构

str(patientdata)

在这里插入图片描述可以看到diabets和status是因子类型,下面会讲。

names()函数用于返回数据框点的列名。使用 %in%运算符与names()函数,能够快速选取特定列。

patientdata[ ,names(patientdata)%in%c("patientID","diabetes")]  

在这里插入图片描述
反之~使用 ! 运算符可以排除特定列

patientdata[ ,!names(patientdata)%in%c("patientID","diabetes")]  

在这里插入图片描述
如果只访问一列,会返回向量,想避免这种类型转换的话,只需要设置drop=FALSE即可

patientdata[ ,2]  
patientdata[ ,2,drop=F]  

在这里插入图片描述

5因子Factor

因子,简单来说,在 R 中,因子就是分类数据。

比如说,狗狗可以分类成“大型犬”“中型犬”“小型犬”,那“狗狗”就是顺序型的因子,它有3种水平(level),分别是“大型犬”“中型犬”“小型犬”。

那还有一些因子其实是无法比较大小的,我们叫它名义型的因子,比如政治倾向中的2种level,“左派”和“右派”。

5.1创建因子

你需要认真学习以下函数:

factor(): 用来建立因子的函数;

nlevels(): 返回因子中的水平个数;

levels(): 返回因子水平目录;

ordered(): 创建有序因子。
在这里插入图片描述
性别属于名义型数据,有“m”(male,男性)与“f”(female,女性)两种可能的值。下面的例子中,创建了性别的因子,保存了男性的变量在sex中。

sex <- factor("m", c("m","f"))
sex

在这里插入图片描述

5.2访问因子中的数据

函数levels()可以获得因子水平的名称。
levels()返回的是向量,所以我们可以用索引获得各水平值。

levels(sex)[1]
levels(sex)[2]

在这里插入图片描述
我们还可以修改因子变量中的水平值
还是用levels()函数
比如:把“m”修改为“male”,“f"修改为"female”

levels(sex)<-c("male","female")
sex

在这里插入图片描述
我们用nlevels()函数来获取因子水平个数;

我们用ordered()函数来设置水平值的顺序。

nlevels(sex)
ordered(sex,c("female","male")

在这里插入图片描述

6.列表List

列表(list)是R的数据类型中最复杂的一种。它什么都存
某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。

6.1创建列表

R中的列表与其他语言中的散列表(Hash table)或字典(Dictionary)非常类似,就是说,列表是以“(键,值)”对的形式保存数据的关联数组(Associative Array)。
在这里插入图片描述
比如:创建一个列表,该列表有4个对象,分别是g、h、j、k
其中对象 g 的 name 为 title,对象 h 的 name 为 ages,其他对象没有 name
g 为 标量字符串“My First List”
h 为数值向量,包含元素 25,26,18,39
j 为 5*2 的矩阵,元素为1:10
k 为字符串向量,包含元素 “one”,“two”,“Three”

x=list(title="My First List",ages=c(25,26,18,39),matrix(1:10,nrow=5),c("one","two","Three"))
x

在这里插入图片描述

6.2访问列表中的数据

访问列表中的数据,我们既可以使用索引又可以使用对象名
在这里插入图片描述
输出列表时,其中的每个对象都会以 $name 的形式罗列出来。使用 x $name形式可以访问对象的数据。
x[n]返回的是(name, value)的子列表,不是value!
而x[[n]]返回的是对象的value

#输出该列表的第二个对象的 value
x[[2]]
#输出该列表第三个对象
x[2]
#输出“ages”的value
x$ages


可以看到x[[[2]]]与x$ages结果一样

五.获取表达矩阵

library(GEOquery)
##下载数据 getGPL = F 这个代表不下载平台注释文件,因为有时候网络不稳定。后面我们会在网页中下载,然后读取。
gset = getGEO('GSE12417', destdir=".",getGPL = F)

gest

View(gset)

view(gset)

class(gset)

class(gset)
[[1]] “list”

可以看到gest对象是list类型数据,提取list类型数据用 [[ ]]

#按序号提取GPL96
e2<-gest[[2]]
#按名字提取
e2<-gset[["GSE12417-GPL96_series_matrix.txt.gz"]]

在这里插入图片描述

# s3:matrix 矩阵 data.frame() 数据框  character() 向量字符型 list 列表
# s4更复杂    

s4对象提取

###提取表达矩阵
exp=exprs(e2)
##当然也可以用环境中的白色括号提取
exp2=e2@assayData[["exprs"]]
class(exp) #[1] "matrix" "array" 
View(exp)
###用 @ 或 $符号
phe=e2@phenoData@data
phel=e2@phenoData@varMetadata$labelDescription

在这里插入图片描述
环境对象保存

save(gest,file="gset.rdata") #把gset对象保存为rdata数据文件
load("gset.rdata") #将这个对象文件加载到环境中
####或者用下面一对函数保存为rds文件
saveRDS(gset,file="gse12417.rds")
readRDS("gse12417.rds")

在这里插入图片描述

整理探针转化文件

#e2<-gset[["GSE12417-GPL96_series_matrix.txt.gz"]]
#e2是GPL96平台,首先下载文件

在这里插入图片描述
往右拉可以看到探针对应的基因名
在这里插入图片描述

library(data.table)
#用里面 fread 函数读取txt文件
anno=fread("GPL96-57554.txt",header = T,data.table = F)
#用read,table读取
anno3=read.table("GPL96-57554.txt",sep="\t",header=T,fill=T)
class(anno)#[1] "data.frame"
View(anno)

在这里插入图片描述

x1=colnames(anno)
x2=rownames(anno)

未完待续。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/89030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GitLab多人开发步骤

目录 一、基于develop创建自己的feature分支二、提交代码格式简易版 三、提交到远程仓库四、提交合并请求 一、基于develop创建自己的feature分支 使用git checkout切换到develop分支 git checkout develop 基于develop分支创建feature分支 格式&#xff1a; git checkout -b …

【CMU15-445 Part-12】Query Execution I

Part12-Query Execution I Processing Models Processing Model主要指的是明确如何去执行一个查询计划&#xff08;top 2 bottom or bottom 2 top,operator之间的传递&#xff09;。 Iterator Model (volcano model/pipeline model);每个算子实现一个Next( )&#xff0c;父…

vim缓存-交换文件

Catf1agCTF靶场 web swp 题目链接&#xff1a;http://catf1ag.cn/ 个人博客&#xff1a;https://sword-blogs.com/ 题目考点&#xff1a; vim在编辑文档的过程中如果异常退出&#xff0c;会产生缓存文件 vim 交换文件名 参考文章&#xff1a;vim手册 https://yianwillis.…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

Linux进程概念

文章目录 前言一、操作系统1、概念2、设计OS的目的3、总结 二、进程1、基本概念2、查看进程2.1 使用ps axj命令2.2 通过 /proc 系统文件夹查看 3、通过系统调用获取进程标示符3.1 getpid() 系统调用3.2 getppid() 系统调用 4、通过系统调用fork创建子进程4.1 使用fork创建子进程…

Linux 常用基本命令

1.走近Linux系统 开机登录 开机会启动许多程序。它们在Windows叫做"服务"&#xff08;service&#xff09;&#xff0c;在Linux就叫做"守护进程"&#xff08;daemon&#xff09;。 关机 在linux领域内大多用在服务器上&#xff0c;很少遇到关机的操作。毕竟…

【yolox训练过程中遇到的问题集合】

这里写目录标题 深度学习遇到的一系列bugVScode无法激活conda1.vscode加载web 视图报错2.CUDA out of memory3.voc2007数据集中的txt文件4.object has no attribute ‘cache‘5.KeyError:model6.No module named loguru7.Python AttributeError: module ‘distutils‘ has no a…

微信小程序 工具使用(HBuilderX)

微信小程序 工具使用:HBuilderX 一 HBuilderX 的下载二 工具的配置2.1 工具 --> 设置 --> 运行配置2.1.1 微信开发者工具路径2.1.2 node 运行配置 2.2 插件 工具 --> 插件安装2.2.1 下载插件 三 微信小程序端四 同步运行五 BUG5.1 nodemon在终端无法识别 一 HBuilderX…

没有一技之长,该如何找工作?

很负责任的告诉你&#xff0c;跟你一样有这个困惑的人真的太多了&#xff01; 而且你也会发现&#xff0c;你身边的大多数人也都很迷茫。 家庭、学历一般&#xff0c;没啥特长爱好&#xff0c;更没有拿的出手的技能。 想要告诉你的是&#xff0c;你觉得你自己一无所长&#…

Java 8 CompletableFuture 学习及实践笔记

CompletableFuture 学习及实践笔记 CompletableFuture 是 Java 8 引入的一个强大的异步编程工具&#xff0c;它提供了一种简洁而灵活的方式来处理异步操作和构建复杂的异步流程。 创建 CompletableFuture 使用 CompletableFuture.supplyAsync(Supplier<U> supplier) 方…

全网最全Python系列教程(非常详细)---字符串讲解(学Python入门必收藏)

&#x1f9e1;&#x1f9e1;&#x1f9e1;这篇是关于Python中字符串的讲解&#xff0c;涉及到以下内容&#xff0c;欢迎点赞和收藏&#xff0c;你点赞和收藏是我更新的动力&#x1f9e1;&#x1f9e1;&#x1f9e1; 本文将从以下几个方面展开对字符串的讲解&#xff1a; 1、字…

如何使用docker快速部署MinDoc文档系统

MinDoc是非常优秀的知识分享系统&#xff0c;但是很多刚接触的人会一脸懵逼&#xff0c;而且官方文档写的也并不清晰&#xff0c;所以和大家分享一下快速部署MinDoc的方法。 首先docker环境先自行安装好&#xff0c;这里不再赘述。 拉取docker镜像&#xff1a; docker pull …

【开发篇】九、SpringBoot整合ES(ElasticSearch)

文章目录 1、整合2、简单示例3、一点补充4、增删改查索引与文档 1、整合 整合思路都一样&#xff0c;先起步依赖或普通依赖&#xff0c;再配置&#xff0c;再封装的操作对象。先引入依赖&#xff1a; <dependency> <groupId>org.springframework.boot</grou…

基于Java的电影评论网站设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Java的电影评论网站…

IntelliJ IDEA - Maven 在控制台Maven编译正常,但是在IDEA中不正常,表现不一致

文章目录 现象原因解决验证 现象 一个Maven项目&#xff0c;当导入到IDEA后&#xff0c;无法在IDEA中正常的编译和下载jar依赖&#xff0c;类似下面的截图。 但是在Windows控制台却可以正常编译&#xff0c;类似下面的截图。 CMD执行&#xff1a;mvn clean install -Dmaven.te…

水库河道生态流量监测系统的主要内容

一、系统背景 我国为保护河流生态环境&#xff0c;推动水资源科学、合理、有序开发和可持续利用&#xff0c;各地水利和环保部门相继出台措施对不满足生态流量下泄要求的水电站责令整改或挂牌督办。近几年几百家水库在各个主要流域建成&#xff0c;由于缺乏对各个水库生态下泄流…

为什么说软文能够扩大中小企业的品牌影响力?

在当今的商业环境中&#xff0c;品牌影响力对于企业的成功至关重要。对于中小企业来说&#xff0c;利用软文来打造品牌影响力是一种成本低且效果更高的方式。为什么说软文能够扩大中小企业的品牌影响力呢&#xff1f;下面就让媒介盒子告诉你。 一、塑造品牌形象 首先&#xff…

走心分享!天津诚筑说Java大数据培训我该如何选择?

随着互联网的发展&#xff0c;IT行业变得越来越炙手可热&#xff0c;其中较为火热的当属大数据和Java了&#xff0c;许多学员都很纠结&#xff0c;Java和大数据我应该如何选择呢?今天小编带大家了解一下Java和大数据之间的区别&#xff01; Java和大数据的关系 Java是一种面…

搭建安信可小安派Windows 开发环境

搭建小安派Windows 开发环境 Ai-Pi-Eyes 系列是安信可开源团队专门为Ai-M61-32S设计的开发板&#xff0c;支持WiFi6、BLE5.3。所搭载的Ai-M61-32S 模组具有丰富的外设接口&#xff0c;具体包括 DVP、MJPEG、Dispaly、AudioCodec、USB2.0、SDU、以太网 (EMAC)、SD/MMC(SDH)、SP…

Mojo:新AI语言中的7个惊人的Python升级

一、说明 AI发展是日新月异的&#xff0c;对于新模型的产生&#xff0c;我们不能不给以关注。Mojo就是一种新发布的编程语言&#xff0c;专为AI开发人员制作&#xff0c;由Modular制作&#xff0c;Modular是一家由Swift的原始创建者Chris Lattner创立的公司。 二、关于MOJO的概…