第1章 R语言入门:R与RStudio安装、基本数据类型与向量操作

好,咱们直接进入正题。这第一章,说白了就是打地基。我见过太多同学上来就撸机器学习,结果连数据框都建不利索,调了半天参发现是数据类型搞错了。嗯,这种坑我自己也踩过,所以咱们一步一步来,先把工具配好,把最基础的几个概念摸透。

1.1 环境搭建:R与RStudio

在开始敲代码之前,先把战场布置好。R是计算引擎,RStudio是IDE界面。我个人习惯先装R,再装RStudio,顺序反了可能会报奇奇怪怪的路径错误。

安装步骤

  1. 去CRAN(https://cran.r-project.org/)下载对应系统的R基础包。
  2. 一路默认安装,但注意:Windows用户建议勾选“将R添加到系统PATH”。
  3. 去RStudio官网(https://posit.co/download/rstudio-desktop/)下载免费版安装。
  4. 打开RStudio,确认界面右下角Console里出现R版本信息。

快速验证:在Console里输入以下代码,能打印出“Hello R”就算装对了。

print("Hello R")
version$version.string

避坑指南:我曾经在公司的内网机器上装R,忘了设置libPaths,结果所有包都装到了默认的C盘,后来空间爆了才发现。建议安装后立即运行.libPaths()确认包路径。

1.2 基本数据类型:你得认识这五种

R里的数据就像工具箱里的螺丝刀,不同类型干不同活儿。别急,我挨个讲,顺便给个日常项目中的真实用法。

类型说明举例
数值型 (numeric)整数和小数统称3.14, -5, 1e3
字符型 (character)字符串,用引号括起来"丰度", 'OTU_001'
逻辑型 (logical)TRUE/FALSETRUE, FALSE, 3 > 5
整数型 (integer)纯整数,要加L后缀42L, -7L
复数型 (complex)不常用,但了解下1 + 2i

你想想看,为啥要区分integer和numeric?我在处理丰度矩阵时发现,默认读进来的整数会被当作numeric,存储翻一倍。后来我养成习惯:明确用as.integer()转换,尤其处理样本分组编号时。

调试小技巧:用class()和typeof()查看类型,比猜靠谱得多。比如:

a <- 3
class(a)   # "numeric"
b <- 3L
class(b)   # "integer"

类型转换与强转

R比较“佛系”——它会在需要时自动转换。但自动转换经常偷摸改你的数据,比如逻辑值变成0/1。我建议关键操作前手动转:

x <- c(TRUE, FALSE, TRUE)
as.numeric(x)   # 1 0 1
as.character(x) # "TRUE" "FALSE" "TRUE"

坑别踩:把字符型转数值时会出NA,R不会警告你。我曾经在分析OTU丰度时忘了这茬,结果一半NA没发现,等到画图时才发现曲线断得一塌糊涂。切记:转完类型第一步,检查sum(is.na(你的数据))。

1.3 向量:R语言的核心武器

向量是R最基础的数据结构。说白了,一堆同类型元素排成一行。几乎所有丰度数据——不管是物种计数还是功能基因拷贝数——都是以向量的形式参与计算。

创建向量

最常用的是c()函数(combine的缩写)。记住:向量里所有元素类型必须一致(自动强制转换)。

# 数值向量
abundance <- c(120, 340, 55, 890, 231)

# 字符向量
samples <- c("S1", "S2", "S3", "S4")

# 利用冒号快速生成整数序列
index <- 1:10   # 1 2 3 ... 10

# rep() 和 seq() 也经常用
rep(0, 5)       # 0 0 0 0 0
seq(from=0, to=1, by=0.25) # 0.00 0.25 0.50 0.75 1.00

向量索引与切片

R的索引从1开始,跟大多数编程语言不一样。我刚开始就常写错,后来习惯了反而觉得自然。

vec <- c(10, 20, 30, 40, 50)
vec[3]           # 30
vec[c(1, 4)]     # 10 40
vec[-2]          # 去掉第二个元素:10 30 40 50
vec[vec > 30]    # 返回大于30的元素:40 50

实战片段:在丰度分析中经常要筛选高丰度物种。假设你有otu_counts向量,要保留大于中位数的:

high_abundance <- otu_counts[otu_counts > median(otu_counts)]
length(high_abundance)

向量化运算——R的隐藏加速器

我记得第一次接触R向量化运算时非常震撼:原来不用写for循环!你想想看,对每个元素乘系数,直接写一个表达式就能搞定。这背后是C语言级别的循环,比手写for快几个量级。

a <- 1:5
b <- 6:10
a + b        # 7 9 11 13 15
a * 2        # 2 4 6 8 10
a^2          # 1 4 9 16 25

循环补齐也是个有意思的特性:两个向量长度不一样时,短的会“循环”补全。例如:

c(1, 2, 3) + c(10, 20)   # 11 22 13,R会循环使用第二个向量的10和20

我的习惯:写任何向量运算前,先用length()检查双方长度,避免循环补齐给了你意料之外的结果。我在做相对丰度归一化时被这个坑过——除数向量少了一个元素,结果所有值都偏了。

常用向量函数速览

函数作用示例
sum()求和sum(c(1,3,5)) → 9
mean()均值mean(1:10) → 5.5
sd()标准差sd(rnorm(100))
table()频数统计table(c("A","B","A")) → A:2, B:1
which()返回满足条件的下标which(c(3,7,2) > 4) → 2

这些函数配合向量索引,能瞬间完成很多任务。比如找丰度最高的前5个OTU:

top5 <- order(abundance, decreasing = TRUE)[1:5]
abundance[top5]
第1章知识体系:R入门基础 第1章 知识体系结构 R与RStudio安装 基本数据类型 向量操作核心 常用向量函数 数值型 字符型 逻辑型 整数型 复数型 创建(c/seq/rep) 索引与切片 向量化运算 循环补齐 sum/mean/sd table/which order/sort length/unique 本章所有操作都建立在向量基础上,为后续数据分析打牢根基

小结与衔接

好,第一章就到这。我们搞定了RStudio安装、认识了五种基本数据类型、学会了向量的创建与运算。这些听起来基础,但你在后续所有数据清洗、重抽样、参数调优里都会反复用到——说白了,它们是R世界里最底层的砖头。