下面是一个自定义函数,实现了寻找众数的功能
> mode <- function(x){
+ return(as.numeric(names(table(x))[table(x) == max(table(x))]))
+ }
> mode(c(1,2,2,2,3,3,6,6))
[1] 2
source()
函数可以实现加载外部函数的功能。
如果我们编写了自定义的函数,但是想要使用的话,每一次都需要重新写出函数,这样十分复杂,我们可以直接将函数保存在一个文件中,如果我们需要使用的话再将文件通过source()
函数导入就可以使用了。
假如我们将上面的寻找众数的函数保存在一个文件中,如下
通过source函数就可以将这个函数导入进来,我们也就可以随时使用了
apply()
函数可以对向量元素进行循环处理
apply(data,num,fun)
这个函数大体分为三个参数,第一个是需要处理数据(数组),第二个参数通过传入的数字表示根据什么分组,1表示行,2表示列,3表示第三维度,以此类推,最后一个参数表示的是处理这些数据的函数,函数可以是包里的,也可以是我们自定义的。
下面就是对一个2维数组中按列分组后的数据进行了平均函数的处理,mean函数就是平均值函数
> x
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> apply(x, 2, mean)
[1] 2 5 8 11
lapply()
函数可以对列表元素进行循环处理
lapply(data,fun)
下面是对列表中的数进行求和处理
> a <- list(c(2,5,4,6,7),c(88,416,15,489))
> a
[[1]]
[1] 2 5 4 6 7
[[2]]
[1] 88 416 15 489
> lapply(a, sum)
[[1]]
[1] 24
[[2]]
[1] 1008
sapply()
函数同样是处理列表数据,但是返回的结果是一个表格,而lapply则返回的是列表
sapply(data,fun)
如下,同样是quantile函数处理,lapply返回的是列表,sapply则返回的是一个表格
> lapply(a, quantile)
[[1]]
0% 25% 50% 75% 100%
2 4 5 6 7
[[2]]
0% 25% 50% 75% 100%
15.00 69.75 252.00 434.25 489.00
> sapply(a, quantile)
[,1] [,2]
0% 2 15.00
25% 4 69.75
50% 5 252.00
75% 6 434.25
100% 7 489.00
tapply()
函数
> a <- as.factor(c(1,1,2,3,3))
> a
[1] 1 1 2 3 3
Levels: 1 2 3
> ?as.factor
> tapply(a,a,length)
1 2 3
2 1 2
基本数据类型转换函数如下:
as.character()
:将数据转换成字符串as.complex()
:将数字转换成实数as.numeric()
:将数据转换成数字as.double()
:将数据转换成浮点类型as.integer()
:将数字转换成整数类型as.logical()
:将数字转换成布尔类型as.character()
可以将数据转换成字符串
> as.character(12)
[1] "12"
> as.character('a')
[1] "a"
as.complex()
可以将数字转换成实数
> as.complex(12)
[1] 12+0i
as.numeric()
可以将数据转换成数字
> as.numeric('1321')
[1] 1321
as.double()
将数据转换成浮点类型
> as.double(12)
[1] 12
> as.double(12.1)
[1] 12.1
as.integer()
可以将数字转换成整数类型
> as.integer(123.123)
[1] 123
as.logical()
可以将数字转换成布尔类型
> as.logical(1)
[1] TRUE
> as.logical(0)
[1] FALSE
> as.logical(-1)
[1] TRUE
> as.logical(3)
[1] TRUE
如果我们想知道一个包自带有哪些数据集,可以通过如下命令查看:
data(package='包名')
下面可以查看R中所有包的数据情况
data(package=.package(all.available=TRUE))
通过help.start()
打开帮助页面
通过help()可以直接查看某一个包或者函数的帮助
help([函数名])
help(package = [包名])
?[函数名]
通过debug()
函数进行调试,进入调试浏览器时,命令提示符从“>”变为“Browse[d]>”(“d”表示函数调用链深度)。下面是我们可以在调试浏览器中输入的命令:
这个函数可以使得我们调试的入口从这个函数开始,而且每一次经过这个函数都会触发暂停,而且如果在一个循环中我们想通过c命令查看每一次循环的情况可以在循环中加上browser()
函数,这样就不会一次性执行完。
我们不需要调用debug函数,只要存在browser函数的方法,直接调用该方法就可以进入调试模式,而且会直接执行到browser函数处。