1. 基本算术运算
基本的算术运算符是:
+(加法)
-(减法)
*(相乘)
/(除以)
^(取幂)
好啦,接下来让我们实践一下吧!打开你的RStudio,在控制台中直接键入以下命令:
4 + 7
[1] 11
7 - 4
[1] 3
4 * 7
[1] 28
7/4
[1] 1.75
2^4
[1] 16
以上就是最基本的算术运算,大家可以操作一下,接下来我们要开始稍微难一点点的运算喽。 Tips在R中,“#”用于添加注释以解释R代码的含义。
1.1 基本算术功能
常用的有:
log2(x) # x的对数以2为底log10(x) # x的对数以10为底exp(x) # x的指数abs(x) # x的绝对值sqrt(x) # x的平方根
和计算器一样,R语言也可以很方便地计算对数、指数、绝对值、平方根等,直接输入以上算术公式,按回车就可以啦,大家学会了吗?
接下来,我们要引入一个很重要的概念:变量。
简单来说,变量就是一个名称,就像你叫张三、李四一样。一个人有了名字就更方便交流了,变量也一样。通过设置变量,我们可以进行很多进阶的操作哦!
1.2 给变量赋值
例如,下面的R代码会将病人的年龄存储在一个变量中,例如"patient_age":
patient_age Tips
请注意,可以将或=用于变量分配。
Tips请注意,R区分大小写。这意味着patient_age与Patient_Age不同。
要打印创建的对象的值,只需键入其名称:
patient_age
[1] 2
或使用函数 print():
print(patient_age)
[1] 2
TipsR将对象patient_age(也称为变量)保存在内存中,可以进行一些操作。
#5个病人的年龄5 * patient_age
[1] 10
你可以更改对象的值:
patient_age 5patient_age
[1] 5
函数ls()可用于查看我们创建的对象列表:
ls()
[1] "patient_age"
要删除变量,请使用函数rm():
2. 基本数据类型
基本数据类型为数字,字符和逻辑。
my_age 28my_name "Lily"#逻辑词#(yes/no) <=> (TRUE/FALSE)is_female TRUE
可以使用函数类()来查看变量的类型:
class(my_age)
[1] "numeric"
class(my_name)
[1] "character"
你还可以使用函数is.numeric(),is.character(),is.logical()来检查变量分别是数字,字符还是逻辑。例如:
is.numeric(my_age)
[1] TRUE
is.numeric(my_name)
[1] FALSE
如果要将变量的类型更改为另一类型,请使用as。*函数,包括:as.numeric(),as.character(),as.logical()等。
my_age
[1] 28
#Convert my_age to a character variableas.character(my_age)
[1] "28"
Tips请注意,将字符转换为数字将输出NA(不可用)。R无法将数字变量转换为字符变量。
3. 向量
向量是同一对象中多个值(数字,字符或逻辑)的组合。
在这种情况下,你可以具有数字向量,字符向量或逻辑向量。
3.1 创建一个向量
使用函数c()创建向量,如下所示:
#储存病人的数据到一个数值向量patient_ages 27, patient_ages
[1] 27 25 29 26
#保存病人的名字到一个字符向量my_patients "Zheng", my_patients
[1] "Zheng" "Wang" "Liu" "Li"
# 将病人的婚姻状况存储在逻辑向量中# (yes/no <=> TRUE/FALSE)are_married TRUE, are_married
[1] TRUE FALSE TRUE TRUE
Tips使用函数names()可以给向量的元素命名。
#具有元素名称的向量names(patient_ages) "Zheng", patient_ages
Zheng Wang Liu Li
27 25 29 26
#你还可以创建一个命名向量,如下所示patient_ages <- c(Zheng = 27, Wang = 25, Liu = 29, Li = 26)patient_ages
Zheng Wang Liu Li
27 25 29 26
Tips请注意,向量只能容纳相同类型的元素。例如,你不能有一个既包含字符又包含数字值的向量。
查找向量的长度(即向量中元素的数量)
#病人数量length(my_patients)
[1] 4
3.2 缺失值的情况
我知道我的一些病人有两个孩子。但是对于其余的病人,此信息缺失(NA)。
在R中,缺失值(或缺失信息)用NA表示:
have_child <- c(Zheng = "yes", Wang = "yes", Liu = NA, Li = NA)have_child
Zheng Wang Liu Li
"yes" "yes" NA NA
可以使用函数is.na()来检查数据是否包含缺失值。函数is.na()的结果是一个逻辑向量,其中值TRUE指定x中的对应元素为NA。
#检查have_child是否包含缺失值is.na(have_child)
Zheng Wang Liu Li
FALSE FALSE TRUE TRUE
Tips请注意,还有第二种缺失值,称为NaN(“非数字”)。这是在数学函数无法正常运行的情况下产生的,例如0/0 = NaN。
Tips还要注意,对于NA和NaN值,函数is.na()均为TRUE。为了区分这些,函数is.nan()仅对NaN是TRUE。
3.3 获取向量的子集
通过正索引选择:通过向量在方括号中的位置(索引)选择元素
#选取第二个病人名字my_patients[2]
[1] "Wang"
#选取第二和第四个病人名字my_patients[c(2, 4)]
[1] "Wang" "Li"
#选取第一到三个病人名字my_patients[1:3]
[1] "Zheng" "Wang" "Liu"
Tips请注意,R从1开始索引,而不是0。因此,你的第一列位于[1]而非[0]。
如果你有命名向量,也可以使用名称来选择元素:
patient_ages["Liu"]Liu
28
通过负索引进行选择:排除元素
#去除第二个病人my_patients[-2]
[1] "Zheng" "Liu" "Li"
#去除第二和第四个病人my_patients[-c(2, 4)]
[1] "Zheng" "Liu"
#去除第一到三个病人my_patients[-(1:3)]
[1] "Li"
如果要删除丢失的数据,请使用以下方法:
have_child
Zheng Wang Liu Li
"yes" "yes" NA NA
#只保留无缺失的数据have_child[!is.na(have_child)]
Zheng Wang
"yes" "yes"
#将缺失值转成NOhave_child[is.na(have_child)] "NO"have_child
Zheng Wang Liu Li
"yes" "yes" "NO" "NO"
请注意,
R中可用的“逻辑”比较运算符为:
<:少于
>:大于
<=:小于或等于
> =:大于或等于
==:相等
!=:不相等
3.4 向量计算
如果对向量执行操作,则该操作将应用于向量的每个元素。下面提供了一个示例:
#病人的每周住院费用payment 2000, names(payment) "Zheng", payment
Zheng Wang Liu Li
2000 1800 2500 3000
#费用的两倍payment * 2
Zheng Wang Liu Li
4000 3600 5000 6000
如你所见,R将费用向量中的每个元素乘以2。
假如你需要将费用乘以不同的系数。可以使用以下R代码:
#创建与付款相同长度的coefs向量coefs 2, #乘以coefspayment * coefs
Zheng Wang Liu Li
4000 2700 2500 9000
Tips请注意,计算是逐元素进行的。工资向量的第一个元素乘以coefs向量的第一个元素,依此类推。
计算数值向量的平方根:
my_vector 4, sqrt(my_vector)
[1] 2 4 3
其他一些常用的功能,小编在这里列出,欢迎尝试:
max(x)min(x)range(x)length(x)sum(x)mean(x)sd(x)var(x)sort(x)
4. 因素
因子变量表示数据中的类别或组。函数factor()可用于创建因子变量。
创建一个因素
patient_groups 1, patient_groups
[1] 1 2 1 2
Levels: 1 2
Tips变量patient_groups包含两类病人:1和2。在R术语中,类别称为因素水平(factor level)。
可以使用level()函数访问因素水平:
#查看因素水平levels(patient_groups)
[1] "1" "2"
#更改因素水平1、2为具体内容levels(patient_groups) "recovered_patient", patient_groups
[1] recovered_patient not_recovered_patient recovered_patient not_recovered_patient
Levels: recovered_patient not_recovered_patient
好了,本期讲解就先到这里。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。