1、R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。
2、函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差sd,求平均值,求生物多样性指数等。
3、R数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。
4、对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。研究现有的R函数能够使编程水平迅速提高。
5、R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。
6、函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
7、函数声明,包括FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如isna,ismatrix,isnumeric等等,或者对大小的比较,如,if(x>0),if(x==1),if(length(x)==3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。
observations = c(2 , 46 , 1 , 37 , 59 , 40 , 67 , 28)
observations_standard=(observations-mean(observations))/(sd(observations))
#验证下是否靠谱
mean(observations_standard)
var(observations_standard)
直接百度公式自己手算吧。你也是够懒的,首先m是期望,s是标准差
g1<- n/((n-1)(n-2))sum((x-m)^3)/s^3g2<- ((n(n+1))/((n-1)(n-2)(n-3))sum((x-m)^4)/s^4-(3(n-1)^2)/((n-2)(n-3)))
第一个是峰度,第二个偏度
好消息,FBasics包中有,e1071中也有。我记得有人说算出来有微小差别
skewness()
kurtosis()
对实验数据检验方差相等的正态分布总体均值是否相等。判断各因素对试验指标影响是否显著。根据影响实验指标条件的个数可以区分为:单因素方差分析,双因素方差分析,多因素方差分析
boxplot(目标变量~变量,data=数据框)
箱子中的黑线是中值,箱体是下边缘为1/4分位数,上边缘为3/4分位数。上下两侧为最小值和最大值。
第一列为均值差异,第二列为置信区间,最后为P值(校正后)
上方存在相同字母的组间差异不显著
R语言实际上是函数的集合,用户可以使用base,stats等包中的基本函数,也可以自己编写函数完成一定的功能。但是初学者往往认为编写R函数十分困难,或者难以理解。这里对如何编写R函数进行简要的介绍。
函数是对一些程序语句的封装。换句话说,编写函数,可以减少人们对重复代码书写,从而让R脚本程序更为简洁,高效。同时也增加了可读性。一个函数往往完成一项特定的功能。例如,求标准差sd,求平均值,求生物多样性指数等。R数据分析,就是依靠调用各种函数来完成的。但是编写函数也不是轻而易举就能完成的,需要首先经过大量的编程训练。特别是对R中数据的类型,逻辑判别、下标、循环等内容有一定了解之后,才好开始编写函数。 对于初学者来说,最好的方法就是研究现有的R函数。因为R程序包都是开源的,所有代码可见。研究现有的R函数能够使编程水平迅速提高。
R函数无需首先声明变量的类型,大部分情况下不需要进行初始化。一个完整的R函数,需要包括函数名称,函数声明,函数参数以及函数体几部分。
1 函数名称,即要编写的函数名称,这一名称就作为将来调用R函数的依据。
2 函数声明,包括 <- function, 即声明该对象的类型为函数。
3 函数参数,这里是输入的数据,函数参数是一个虚拟出来的一个对象。函数参数所等于的数据,就是在函数体内部将要处理的值,或者对应的数据类型。 函数体内部的程序语句进行数据处理,就是对参数的值进行处理 ,这种处理只在调用函数的时候才会发生。函数的参数可以有多种类型。R help的界面对每个函数,及其参数的意义及所需的数据类型都进行了说明。
4 函数体
常常包括三部分
(1) 异常处理
输入的数据不能满足函数计算的要求,或者类型不符, 这时候一定要设计相应的机制告诉用户,输入的数据在什么地方有错误。 错误又分为两种。
第一种, 如果输入的数据错误不是很严重,可以经过转换,变为符合处理要求的数据时, 此时只需要给用户一个提醒,告知数据类型不符,但是函数本身已经 进行了相应的转换。
第二种,数据完全不符合要求,这种情况下,就 要终止函数的运行,而告知因为什么,函数不能运行。这样,用户在 使用函数的情况先才不至于茫然。
(2) 运算过程
包括具体的运算步骤。 运算过程和该函数要完成的功能有关。
R运算过程中,应该尽量减少循环的使用,特别是嵌套循环。R提供了 apply,replicate等一系列函数,来代替循环,应该尽量应用这些函数, 提高效率。 如果在R中实在太慢,那么核心部分只能依靠C或者Fortran 等语言编写,然后再用R调用这些编译好的模块,达到更高的效率。
运算过程中,需要大量用到if等条件作为判别的标准。if和while都是需要数据TRUE/FALSE这样的逻辑类型变量,这就意味着,if内部,往往是对条件的判别,例如 isna, ismatrix, isnumeric等等,或者对大小的比较,如,if(x > 0), if(x == 1), if(length(x)== 3)等等。if后面,如果是1行,则花括号可以省略,否则就必须要将所有的语句都放在花括号中。这和循环是一致的。
例子:
## if与条件判断
funtest <- function(a, b, method = "add"){
if(method == "add") { ## 如果if或者for/while;
res <- a + b ## 等后面的语句只有一行,则无需使用花括号。
}
if(method == "subtract"){
res <- a - b
}
return(res) ## 返回值
}
### 检验结果
funtest(a = 10, b = 8, method = "add")
funtest(a = 10, b = 8, method = "substract")
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)