修改默认提示语言

R 默认提示的语言有的人是英文,有的人是中文,这是因为每个人系统默认语言不同,可以通过下面方式进行修改
(装 R 的时候不勾选 message transition 选项也可以)

1
2
Sys.getlocale() # 显示系统语言
Sys.setenv(LANG="en") # 更换默认语言为英文

查看 R 占用内存

可以使用 memory.size() 获取内存大小,不过该函数仅限 Windows 系统。

1
2
memory.size() # 获取内存大小
[1] 341

查看数据集内存占用

1
2
3
4
> object.size(mtcars)
7208 bytes
> object.size(mtcars)/1024 # 以kb显示
7 bytes

代码中换行

默认回车是运行代码,在 Rstudio 中有自动补齐,比如定义一个函数,直接自动补齐了 {},回车就运行了,可以使用 shift+enter 换行

1
2
3
function(x,y) {

}

边赋值边显示

默认赋值完,直接敲变量名就打印数据,可以利用下面方式一步完成两个操作。

1
2
3
(x <- runif(10))
[1] 0.5795985 0.4661326 0.9730974 0.6697417 0.2431985 0.3988545 0.4064351 0.8403910
[9] 0.3136191 0.9979925

查看源代码

如果想查看 R 函数的源代码,直接输入函数名,不加括号即可。

1
2
3
4
5
> mean
function (x, ...)
UseMethod("mean")
<bytecode: 0x0000023e3b8db998>
<environment: namespace:base>

利用函数修改镜像

如果不设置 R 镜像,每次安装 R 包是都会弹出选择框,可以在安装之前通过函数进行设置,使用 chooseCRANmirror() 函数,给定 ind 选项一个数值即可。数值代表镜像编号。

1
2
3
4
5
6
7
8
9
10
11
12
13
> chooseCRANmirror()
Secure CRAN mirrors

1: 0-Cloud [https] 2: Australia (Canberra) [https]
3: Australia (Melbourne 1) [https] 4: Australia (Melbourne 2) [https]
5: Australia (Perth) [https] 6: Austria [https]
7: Brazil (BA) [https] 8: Brazil (PR) [https]
9: Brazil (RJ) [https] 10: Brazil (SP 1) [https]
11: Brazil (SP 2) [https] 12: Bulgaria [https]
13: Canada (MB) [https] 14: Chile (Santiago) [https]
15: China (Beijing 2) [https] 16: China (Hefei) [https]
17: China (Hong Kong) [https] 18: China (Guangzhou) [https]
> chooseCRANmirror(ind = 18)

显示更多数据

默认 R 显示 1000 行数据,如果想显示更多,可以通过设置 max.print 选项。

1
2
3
4
5
6
7
8
> options('max.print')
$max.print
[1] 1000

> options('max.print'=2000)
> options('max.print')
$max.print
[1] 2000

默认保留小数点

默认 R 显示 7 为小数,如果想默认保留两位小数,可以通过设置 digits 选项。

1
2
3
4
5
6
7
8
> options('digits')
$digits
[1] 7

> options('digits'=2)
> options('digits')
$digits
[1] 2

管道

使用管道让代码更加简洁,无需定义过多中间变量。R中的管道符号为 %>% 如果要使用管道,需要加载 magrittr 包。其实 Rstudio 出的各种包都默认支持管道,如果加载了 tidyverse 包也是可以。

1
2
3
> library(magrittr)
> library(ggplot2)
> mtcars %>% ggplot(aes(x=cyl,y=mpg,group=cyl))+geom_boxplot()

拆分列数据

有些时候记不住列名,或者容易拼错,想要列名也能够自动补齐,可以使用 attach 函数,这样每一列就变成一个独立的变量。

1
2
3
4
5
6
attach(mtcars)
> cyl
[1] 6 6 4 6 8 6 8 4 4 6 6 8 8 8 8 8 8 4 4 4 4 8 8 8 8 4 4 4 8 6 8 4
> mpg
[1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4 10.4
[17] 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7 15.0 21.4

默认加载包

如果一些包经常使用,想要启动R之后自动加载,可以在配置文件中进行设置,例如每期启动 R,自动加载 ggplot2 包。

1
2
3
4
file.edit("~/.Rprofile")
.First <- function() {
library(ggplot2)
}

为R添加额外扩展包加载路径

默认 R 包的加载目录在 .libPaths() 目录中,当然可以为其添加更多的路径。

1
2
3
4
5
6
> .libPaths()
[1] "C:/Users/genom/Documents/R/win-library/4.0"
[2] "C:/Program Files/R/R-4.0.3/library"
> .libPaths(new = "C:/Users/genom/Desktop/nparFiles/")
> .libPaths()
[1] "C:/Users/genom/Desktop/nparFiles" "C:/Program Files/R/R-4.0.3/library"

迁移 R 包

如果需要将一台设备安装的 R 包,在另外一台设备上安装,首先保存 A 设备上的 R 包名字列表,在另外一台设备上写一个循环进行安装。

1
2
3
4
5
6
7
8
9
10
# 在 A 设备上保存名字列表
oldip <- installed.packages()[,1]
save(oldip,file = "installedPacckages.Rdata")

# 在 B 设备上进行安装;
load("installedPacckages.Rdata")
newip <- installed.packages()[,1]
for (i in setdiff(oldip,newip)) {
install.packages(i)
}

列出 R 包中的函数

如果想查看一个 R 包中全部函数,可以使用下面的语句。

1
ls(package:base)

不加载包使用其中函数

如果加载 R 包,还想使用其中的函数,需要使用 包名::函数 的方式。

1
dplyr::filter()

快速获取颜色

在绘图的时候,想要快速设置几个不同的颜色,又嫌生成颜色比较麻烦。可以使用 rainbow() 函数,给定一个数据,快速生成颜色。

1
2
> rainbow(6)
[1] "#FF0000" "#FFFF00" "#00FF00" "#00FFFF" "#0000FF" "#FF00FF"

炸开数据

前面介绍了 attach() 函数可以将每一列变成一个单独变量,但这种方式并不推荐,因为会让变量环境很混乱。可以使用一个特殊管道符 %$% 实现同样的效果,我称之为把数据“炸开”

1
2
3
4
> library(magrittr)
Warning message:
程辑包‘magrittr’是用R版本3.6.3来建造的
> women %$% plot(weight,height)

巧用 example() 函数学习绘图

example() 函数会帮助运行 R 帮助文档中的代码,有时候想看一个函数如何使用,可以直接运行这个函数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
> library(pheatmap)
> example("pheatmap")

phetmp> # Create test matrix
phetmp> test = matrix(rnorm(200), 20, 10)

phetmp> test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3

phetmp> test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2

phetmp> test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4

phetmp> colnames(test) = paste("Test", 1:10, sep = "")

phetmp> rownames(test) = paste("Gene", 1:20, sep = "")

phetmp> # Draw heatmaps
phetmp> pheatmap(test)

统计计算时间

想统计一条代码运行时间,可以使用 system.time() 函数

1
2
3
> system.time(runif(100000000))
用户 系统 流逝
2.75 0.08 2.83

释放内存

R 有一套自己的内存回收机制,因此,即使删除了变量,内存不会立即变化,可以使用 gc() 函数释放内存。

1
2
3
4
5
6
7
8
9
10
11
> memory.size()
[1] 297.56
> rm(list = ls())
> memory.size()
[1] 298.54
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1384255 74.0 4046672 216.2 4046672 216.2
Vcells 4288164 32.8 27057220 206.5 33821525 258.1
> memory.size()
[1] 255.5

删除全部变量

1
2
3
4
5
6
# 显示全部变量内容
> ls()
# 删除
> rm(list=ls())
# 释放内存
> gc()

恢复默认数据集

如果不小心将内置数据集删除了,或者新定义同名变量,就会替换原有数据集。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
> mtcars=1:10
> mtcars
[1] 1 2 3 4 5 6 7 8 9 10
> data("mtcars")
> head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
>

快速获取函数选项参数

R 函数的选项参数非常多,如果每次都调出帮助文档很麻烦,可以使用 args() 函数,快速打印出函数的选项参数。

1
2
3
4
5
6
7
8
9
10
11
> args(heatmap)
function (x, Rowv = NULL, Colv = if (symm) "Rowv" else NULL,
distfun = dist, hclustfun = hclust, reorderfun = function(d,
w) reorder(d, w), add.expr, symm = FALSE, revC = identical(Colv,
"Rowv"), scale = c("row", "column",
"none"), na.rm = TRUE, margins = c(5, 5), ColSideColors,
RowSideColors, cexRow = 0.2 + 1/log10(nr), cexCol = 0.2 +
1/log10(nc), labRow = NULL, labCol = NULL, main = NULL,
xlab = NULL, ylab = NULL, keep.dendro = FALSE, verbose = getOption("verbose"),
...)
NULL