怎么用r语言写核密度估计函数的程序

Python014

怎么用r语言写核密度估计函数的程序,第1张

R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。

函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差sd,求平均值,求生物多样性指数等。R数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。 对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。研究现有的R函数能够使编程水平迅速提高。

R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。

函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。

2. 函数声明,包括 <- function, 即声明该对象的类型为函数。

3. 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。R help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。

4. 函数体

常常包括三部分.

(1). 异常处理

输入的数据不能满足函数计算的要求,或者类型不符, 这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。 错误又分为两种。

第一种, 如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时, 此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经 进行了相应的转换。

第二种,数据完全不符合要求,这种情况下,就 要终止函数的运行,而告知因为什么,函数不能运行。这样,用户在 使用函数的情况先才不至于茫然。

(2). 运算过程

包括具体的运算步骤。 运算过程和该函数要完成的功能有关。

R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。R提供了 apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在R中实在太慢,那么核心部分只能依靠C或者Fortran 等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。

运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如 is.na, is.matrix, is.numeric等等,或者对大小的比较,如,if(x >0), if(x == 1), if(length(x)== 3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。

例子:

## if与条件判断

fun.test <- function(a, b, method = "add"){

if(method == "add") { ## 如果if或者for/while;

res <- a + b ## 等后面的语句只有一行,则无需使用花括号。

}

if(method == "subtract"){

res <- a - b

}

return(res) ## 返回值

}

### 检验结果

fun.test(a = 10, b = 8, method = "add")

fun.test(a = 10, b = 8, method = "substract")

#设置默认路径

#显示当前工作目录(软件默认使用工作目录)

getwd()

#修改默认工作目录

setwd(dir = "e:/Rwork/")

#提示工作目录

getwd()

#查看目录下包含的文件

list.files()

#或者

dir()

#R包安装

install.packages("vcd")

#显示库所在的位置

.libPaths()

#显示库里有哪些安装包

library()

#载入包

library(vcd)

#or

require(vcd)

#直接输入函数看某些函数来自于R的哪个包

#如何使用R包

help(package="vcd")

help(package="ggplot2")

#查看包的信息,列出R包的基础内容,显示内置的数据集的内容,给包中的函数作为案例来使用

library(help="vcd")

#还有一些包中的函数,是包的核心内容,扩展了R的功能

Arthritis

#列出包中所有包含的函数

ls("package:vcd")

#每个函数如何使用查看对应帮助文档

#列出R包中包含的所有数据集

data(package="vcd")

#使用完一个包之后,将包从内存中移除

detach("package:vcd")

#再使用

Arthritis

#会出现报错:需要重新再加载

#删除已安装的包

remove.packages("vcd")

#会将R包从硬盘上彻底删除,无法继续使用了,用得不多

#R包的批量移植(更换新设备)

#列出当前环境中已安装的R包

installed.packages()

#取第一列,,,使用下标来访问数据框的第一列

installed.packages()[,1]

#将所以R包名字保存到一个文件中

Rpack<- installed.packages()[,1]

save(Rpack,file = "Rpack.Rwork")

#将这个文件移到另一个设备上

#在另一个设备上使用load函数打开这个文件

#存到另外一个变量Rpack中

#看到这些R包

#Rpack

#批量安装这些R包

#使用一个for循环

for(i in Rpack)install.packages(i)

#如何获取R的帮助信息

help.start()

#查看某个函数的功能

help(sum)

#or

?plot

?sum

#快速了解函数参数而不想查阅详细文档

args(plot)

#查看函数使用案例

example(mean)

example("hist")

#列出R的一些案例图

demo(graphics)

#查看R安装的某个包的帮助文档

help(package=ggplot2)

#有些R包包含vignette文档,这中文档包含更多内容,也更加规范,里面有简介、教程、开发文档等

vignette()

#不是每个包都包含这种格式的文档

vignette("xts")

#有时安装了某包但使用help命令搜索不到相关函数,是因为没有载入这个包

#需用使用library函数载入这个包

#载入之后才能使用help函数找到相关文档

#或者直接在help命令中加上package选项  等于  要搜索R包的名字,这种方法比较麻烦

#??接要搜索函数名字,这种情况下不加载包也可以

#有些情况下,不知道具体的函数名,只能模糊搜索

#查找与绘制热图相关的帮助信息(使用这条命令进行本地搜索)

help.search(heatmap)

#提示搜索不到

#因为需要加上引号

help.search("heatmap")

#搜到stats包中的heatmap函数,可以用来绘制热图

#help.search("heatmap")也可以简写成下面一条命令

??heatmap#不需要加引号

#列出所有包含关键字的内容

apropos("sum")

#可以通过mod参数调整查询的内容

apropos("sum",mod="function")#只列出函数

#help.search或??都是进行本地的文档搜索

#有时搜索不到或者文档太老了可以使用RSiteSearch()函数进行网络搜索

RSiteSearch(matlab)

#运行函数会使用默认浏览器来访问R官网,在官网中进行搜索,列出更多的结果

#可以利用搜索引擎进行问题搜索