从零开始进行单倍型分析
(一)基础知识篇
(二)分析工具篇
(三)R语言基础篇之入门(上)(只讲需要的)
(四)R语言基础篇之进阶篇(下)(只讲需要的)
(五)geneHapR之数据准备篇(上)(只讲需要的)
(六)数据准备及软件实操篇
(七)结果诠释篇
本文主要介绍了 R 语言的基本信息,包括其简介、风格、基础变量等内容。R 语言是用于统计计算和绘图的编程语言,具有免费开源、包丰富、数据处理和可视化能力强等特点。其语法简洁灵活,区分大小写,注释包括单行注释和多行注释。基础变量涉及变量的命名与赋值规则,数据类型有数值型、字符型、逻辑型、复数型和原始型,运算符包括算术、逻辑和比较运算符。基本变量类型有向量和数据框,向量可通过多种方式创建和操作,数据框可通过特定函数创建、进行元素访问、添加删除列、合并等操作,并有相关属性和函数。此外,文章还提及了其他变量类型,但未详细介绍,推荐了菜鸟教程网站供读者进一步学习。
一、R语言简介
-
基本概念
- R 语言是一种用于统计计算和绘图的编程语言。它提供了丰富的统计和数据分析方法,以及强大的数据可视化功能。
- 在 R 中,数据是操作的核心。数据可以存储在多种数据结构中,例如向量、数据框等。
-
R 语言的特点
- 免费开源:任何人都可以免费使用和修改 R 语言的源代码。
- 丰富的包(package):有大量的扩展包可用于各种领域,如数据分析、机器学习、生物信息学等。
- 强大的数据处理能力:能够轻松处理和分析大型数据集。
- 优秀的可视化功能:可以创建高质量的统计图表和数据可视化图形。
二、R 语言风格
语言风格
- R 语言的语法简洁且灵活。它使用函数来执行各种操作,函数的调用格式通常是
function_name(arguments)
。 - R 是区分大小写的,这意味着
myVariable
和myvariable
是不同的标识符。 - 代码通常以脚本的形式编写,可以在 R 控制台中逐行执行,也可以一次性运行整个脚本。
R语言里的注释
1. 单行注释
使用#
符号进行单行注释。从#
开始直到该行结束的所有内容都会被 R 解释器忽略。例如:
# 这是一个计算平均值的简单示例
x <- c(1, 2, 3, 4, 5)
mean_value <- mean(x)
2. 多行注释
R 语言本身没有专门的多行注释符号,但可以通过连续使用单行注释来实现多行注释的效果。例如:
# 以下是一段关于数据处理的代码
# 首先读取数据
# data <- read.csv("data.csv")
# 然后进行数据清洗等操作
在实际编程中,良好的注释习惯可以提高代码的可读性,方便自己和其他开发者理解代码的功能、逻辑和算法流程等相关信息。
三、R语言基础变量
变量的命名与赋值
- 变量命名:变量名可以包含字母、数字、点(.)和下划线(_),但不能以数字开头。例如,
my_variable
、data_1
等都是有效的变量名。 - 变量命名的注意事项:
- 1)不能以数字开头:例如,9var是不合法的变量名,而var9是合法的;
- 2)不能是保留字:R 语言中有一些保留字,这些保留字具有特定的语法含义,不能用作变量名,例如,if、else、for、while、function等;
- 3)大小写敏感:在 R 中,变量名是区分大小写的,例如,myVariable和myvariable被视为两个不同的变量;
- 4)语义清晰,见名知义:为了提高代码的可读性,变量名应该尽量具有描述性,能够反映变量所代表的含义或存储的数据内容,例如,使用student_names来表示存储学生姓名的变量,而不是简单地使用x或y。
- 变量的赋值:使用
<-
或=
进行赋值操作。例如:x <- 5
:将数值 5 赋给变量x
。y = "hello"
:将字符串 “hello” 赋给变量y
。
R语言基本数据类型
-
数值型(Numeric)
-
整数(Integer)
- 表示没有小数部分的数字。在 R 中,可以通过在数字后面加上
L
来明确表示一个整数,例如1L
、5L
等。整数可以进行常规的算术运算,如加法、减法、乘法和除法。
- 表示没有小数部分的数字。在 R 中,可以通过在数字后面加上
-
浮点数(Floating - point)
- 用于表示带有小数部分的数字,例如
3.14
、-2.5
等。浮点数在内存中的存储方式遵循 IEEE 754 标准,它能够表示的数值范围和精度是有限的。在进行高精度计算时可能会出现舍入误差。
- 用于表示带有小数部分的数字,例如
-
-
字符型(Character)
- 用于存储文本数据,在 R 中字符型数据需要用单引号
'
或双引号"
括起来,例如'hello'
、"world"
。可以对字符型数据进行操作,如拼接(使用paste()
函数)、提取子串(使用substr()
函数)等。
- 用于存储文本数据,在 R 中字符型数据需要用单引号
-
逻辑型(Logical)
- 逻辑型数据只有两个取值:
TRUE
(真)和FALSE
(假),也可以用T
和F
表示(不建议,因为T
和F
可以被重新赋值)。逻辑型数据主要用于条件判断和逻辑运算,例如在if
语句、while
语句中作为判断条件,或者进行与(&
)、或(|
)、非(!
)等逻辑运算。
- 逻辑型数据只有两个取值:
-
复数型(Complex)
- 用于表示复数,形式为
a + bi
,其中a
是实部,b
是虚部,在 R 中可以写成3 + 4i
这样的形式。复数可以进行加、减、乘、除等运算,R 提供了相应的函数来处理复数的实部、虚部、模和幅角等。
- 用于表示复数,形式为
-
原始型(Raw)
- 原始型数据是以字节为单位存储的数据,可以用来存储和操作二进制数据。例如,可以使用原始型数据来读取和写入二进制文件。
R语言中的运算符
-
算术运算符
- 加法(+)
- 用于两个数值(整数或浮点数)相加,例如:
3 + 5
的结果为8
。 - 也可以用于向量、矩阵等数据结构的对应元素相加,前提是它们的维度相符。
- 用于两个数值(整数或浮点数)相加,例如:
- 减法(-)
- 实现两个数值的相减操作,如
7 - 4
等于3
。 - 同样适用于数据结构元素间的减法运算。
- 实现两个数值的相减操作,如
- 乘法(*)
- 对两个数值进行乘法运算,例如
2 * 6
得到12
。 - 对于向量和矩阵,按照线性代数规则进行乘法运算。
- 对两个数值进行乘法运算,例如
- 除法(/)
- 执行数值间的除法,如
8 / 2
的结果是4
。
- 执行数值间的除法,如
- 取模(%%)
- 返回除法运算的余数,例如
10 %% 3
的结果为1
。
- 返回除法运算的余数,例如
- 整除(%/%)
- 进行整数除法,只取商的整数部分,比如
10 %/% 3
等于3
。
- 进行整数除法,只取商的整数部分,比如
- 加法(+)
-
逻辑运算符
- 与(&、&&)
&
对两个逻辑向量的对应元素进行与运算,例如:c(TRUE, FALSE) & c(TRUE, TRUE)
得到c(TRUE, FALSE)
。&&
通常用于单个逻辑值的与运算,只检查第一个元素,如TRUE && FALSE
为FALSE
。
- 或(|、||)
|
用于逻辑向量对应元素的或运算,如c(TRUE, FALSE) | c(FALSE, TRUE)
得到c(TRUE, TRUE)
。||
主要用于单个逻辑值的或运算,只检查第一个元素,例如TRUE || FALSE
为TRUE
。
- 非(!)
- 对单个逻辑值或逻辑向量的每个元素取反,如
!TRUE
是FALSE
,!(c(TRUE, FALSE))
得到c(FALSE, TRUE)
。
- 对单个逻辑值或逻辑向量的每个元素取反,如
- 与(&、&&)
-
比较运算符
- 等于(==)
- 比较两个对象是否相等,例如
3 == 3
为TRUE
,"a" == "b"
为FALSE
。 - 对于数据结构,比较的是对应元素是否相等。
- 比较两个对象是否相等,例如
- 不等于(!=)
- 检查两个对象是否不相等,如
4!= 5
是TRUE
。
- 检查两个对象是否不相等,如
- 大于(>)
- 当左边对象大于右边对象时返回
TRUE
,例如5 > 3
为TRUE
。
- 当左边对象大于右边对象时返回
- 小于(<)
- 左边对象小于右边对象时结果为
TRUE
,如2 < 4
是TRUE
。
- 左边对象小于右边对象时结果为
- 大于等于(>=)
- 左边对象大于或等于右边对象时为
TRUE
,例如3 >= 3
为TRUE
。
- 左边对象大于或等于右边对象时为
- 小于等于(<=)
- 左边对象小于或等于右边对象时返回
TRUE
,如4 <= 5
是TRUE
。
- 左边对象小于或等于右边对象时返回
- 等于(==)
R语言里基本变量类型
1 向量(Vector)
- ** 向量的定义**
向量是 R 语言中最基本的数据结构之一,它是由一组相同数据类型(如数值型、字符型、逻辑型等)的元素组成的有序集合。可以将其看作是一维的数组。
-
向量的创建
-
使用
c()
函数- 数值型向量:例如
num_vector <- c(1, 2.5, -3, 4)
,可以将多个数值组合成一个数值型向量。 - 字符型向量:
char_vector <- c("apple", "banana", "cherry")
,把字符元素放在c()
函数中创建字符型向量。 - 逻辑型向量:
logical_vector <- c(TRUE, FALSE, TRUE)
,创建包含逻辑值的向量。
- 数值型向量:例如
-
序列生成函数
:
运算符:可以快速生成一个整数序列,例如1:5
会生成向量c(1, 2, 3, 4, 5)
。seq()
函数:更加灵活,例如seq(0, 10, by = 2)
将生成c(0, 2, 4, 6, 8, 10)
,其中0
是起始值,10
是终止值,by = 2
表示步长为 2。
-
-
向量的基本操作
-
访问向量元素
- 通过索引访问:在 R 中,向量的索引从 1 开始。例如,对于向量
vec <- c(10, 20, 30)
,vec[2]
将返回 20。也可以使用负索引来排除某些元素,如vec[-2]
将返回c(10, 30)
。 - 逻辑索引:根据逻辑条件选择元素。例如,对于向量
num_vector <- c(1, 2, 3, 4, 5)
,num_vector[num_vector > 3]
将返回c(4, 5)
。
- 通过索引访问:在 R 中,向量的索引从 1 开始。例如,对于向量
-
向量的运算
- 算术运算:对于数值型向量,可以进行加、减、乘、除等算术运算。如果两个向量长度相同,则对应元素进行运算,例如
c(1, 2, 3) + c(4, 5, 6)
得到c(5, 7, 9)
;如果一个向量和一个标量(单个数值)进行运算,则向量的每个元素都与该标量进行运算,如c(1, 2, 3) * 2
得到c(2, 4, 6)
。 - 逻辑运算:对逻辑型向量进行与(
&
)、或(|
)、非(!
)等逻辑运算。
- 算术运算:对于数值型向量,可以进行加、减、乘、除等算术运算。如果两个向量长度相同,则对应元素进行运算,例如
-
向量的合并
- 使用
c()
函数:可以将多个向量合并成一个新的向量,例如new_vector <- c(vector1, vector2)
。
- 使用
-
-
向量的属性和函数
-
长度
- 使用
length()
函数可以获取向量中元素的个数,例如length(c(1, 2, 3))
的结果为 3。
- 使用
-
类型判断
is.numeric()
、is.character()
、is.logical()
等函数分别用于判断向量是否为数值型、字符型、逻辑型。
-
其他常用函数
sum()
、mean()
、min()
、max()
等函数可以分别计算数值型向量的总和、平均值、最小值和最大值。sort()
函数可以对向量进行排序,例如sort(c(3, 1, 2))
将返回c(1, 2, 3)
。
-
2 数据框(Data Frame)
- 数据框的定义
数据框(Data Frame)是 R 语言中一种非常重要的二维数据结构,它类似于电子表格或数据库中的表。数据框的每一列可以是不同的数据类型(如数值型、字符型、逻辑型等),但每一行的元素个数必须相同。
- 数据框的创建
- 使用
data.frame()
函数
基本创建方式:可以直接在data.frame()
函数中指定列名和对应的值来创建数据框。例如:
df <- data.frame(
Name = c("Alice", "Bob", "Charlie"),
Age = c(25, 30, 35),
Gender = c("Female", "Male", "Male")
)
- 从向量创建:先定义好每一列的向量,再将这些向量组合成数据框。
name_vec <- c("Alice", "Bob", "Charlie")
age_vec <- c(25, 30, 35)
gender_vec <- c("Female", "Male", "Male")
df <- data.frame(Name = name_vec, Age = age_vec, Gender = gender_vec)
-
读取外部文件创建
-
从 CSV 文件创建:使用
read.csv()
函数可以从 CSV(逗号分隔值)文件中读取数据并创建数据框,例如df <- read.csv("data.csv")
。 -
从其他文件格式(如 Excel 文件、文本文件等):需要使用相应的 R 包,如
readxl
包中的read_excel()
函数用于读取 Excel 文件。
-
-
数据框的基本操作
-
访问数据框中的元素
- 通过索引访问
- 按行和列索引:使用
[ ]
运算符,逗号前表示行索引,逗号后表示列索引。例如,df[1, 2]
表示访问数据框df
的第一行第二列的元素;df[1:2, ]
表示访问第一行和第二行的所有列;df[, 2:3]
表示访问第二列和第三列的所有行。 - 按名称索引:使用
$
符号通过列名来访问某一列,例如df$Age
将返回数据框df
中名为Age
的列。
- 按行和列索引:使用
- 使用逻辑索引:根据逻辑条件选择数据框中的行或列。例如,
df[df$Age > 30, ]
将返回数据框df
中Age
列大于 30 的所有行。
- 通过索引访问
-
添加和删除列
- 添加列:可以直接给数据框新增一列,例如
df$NewColumn <- c(1, 2, 3)
,给df
添加了一个名为NewColumn
的新列。 - 删除列:可以使用
subset()
函数或者通过赋值NULL
来删除列,例如df <- subset(df, select = -NewColumn)
或者df$NewColumn <- NULL
。
- 添加列:可以直接给数据框新增一列,例如
-
合并数据框
rbind()
函数:用于按行合并数据框,要求合并的数据框具有相同的列数和相同的列名。例如,df_combined <- rbind(df1, df2)
。cbind()
函数:用于按列合并数据框,要求合并的数据框具有相同的行数。例如,df_combined <- cbind(df1, df2)
。
-
-
数据框的属性和函数
-
查看数据框的结构
str()
函数:可以查看数据框的结构,包括列名、每列的数据类型以及前几个数据元素等信息。dim()
函数:返回数据框的行数和列数,例如dim(df)
将返回一个包含行数和列数的向量。
- 数据框的统计汇总
summary()
函数:对数据框的每一列进行基本的统计汇总,对于数值列会给出最小值、最大值、中位数、均值和四分位数等信息,对于字符列会给出不同取值的数量。
-
-
行名与列名
-
查看
-
列名查看
- 使用
colnames()
函数,例如对于数据框df
,colnames(df)
将返回列名组成的字符向量。 - 也可以使用
names(df)
,效果与colnames(df)
相同。
- 使用
-
行名查看
- 使用
rownames()
函数,例如rownames(df)
可以查看数据框df
的行名。
- 使用
-
-
修改
-
列名修改
- 使用
colnames()
函数,例如colnames(df) <- c("new_col1", "new_col2",...)
可以将df
的数据框的列名修改为指定的新列名。 - 也可以在创建数据框时直接指定列名,如
df <- data.frame(new_col1 = values1, new_col2 = values2,...)
。
- 使用
-
行名修改
- 同样使用
rownames()
函数,例如rownames(df) <- c("row1", "row2",...)
可以修改数据框df
的行名。
- 同样使用
-
-
注意事项
-
唯一性
- 列名在一个数据框中必须是唯一的,不能有重复的列名。如果尝试设置重复的列名,可能会导致数据访问和操作出现混淆。
- 行名也通常要求具有唯一性,尤其是在一些需要根据行名进行索引和匹配的操作中。不过,R 语言在某些情况下允许行名重复,但这可能会引起意想不到的结果。
-
字符类型
- 列名和行名通常是字符型向量。在修改或指定列名和行名时,要确保提供的是字符型数据。
-
影响其他操作
- 修改行名和列名可能会影响基于这些名称进行的其他操作,如数据提取、合并操作等。例如,如果在一个数据框和另一个数据框进行合并时,它们的列名不一致,可能需要先调整列名以确保合并操作的正确性。
-
-
3. 其他变量类型
R语言里的其他变量类型还包括:列表、矩阵、数组等;由于篇幅限制,以及其他变量类型其在单倍型分析中的必要性有限,故本文不过多介绍。
如有需要请自行去问度娘,然各路大神做的教程参差不齐;故另推荐菜鸟教程,一个适合新手入门的网站。