目录
3.1基本方法
3.1.1 基本函数
1.帮助函数
help(read.csv)
2.工作目录函数
setwd(“文件地址 ”)#修改当前目录
getwd()#显示当前工作目录
3.安装及调用包
install.packages("dstat R")#安装dstat.R包
library(dstat R)
3.1.2自定义函数
函数内的变量名是局部的,即当函数运行结束后他们不再被保存到当前的工作空间,这就可以避免许多不必要的混淆和内存空间被占用的情况。
编写函数的语法为:
函数名<-function(参数1,参数2,。。。)
{
函数体
函数返回值
}
1.函数名
sq.sum<-function(x){
S=sum(x^2)
S #return(S)
}
注意,有别于其他语言,这里的函数参数x可以是一个数值,向量,矩阵或数据框
> sq.sum(ug$height)
[1] 1363038
> sq.sum(1:9)
[1] 285
2.函数参数
函数参数根据实际需要的不同而有不同的参数设置,下面将介绍三种情况
(1)无参数:有时编写参数是为了某种方便,函数每次的返回值都是一样的,其输入不是那么重要。
比如
> welcome<-function(){
+ print("welcome to R")}
> welcome
function(){
print("welcome to R")}
> welcome()
[1] "welcome to R"
(2)单参数
> welcome<-function(names){
+ print(paste("welcome",names,"to use r"),sep=" ")
+ }
> welcome("yangfan")
[1] "welcome yangfan to use r"
(3)默认参数:指不输入任何参数
没输入参数,单参数函数welcome将返回出错信息。其实我们可以给函数设置默认,R提供了一个简单的方法允许给函数的参数设置默认值,比如:
> welcome<-function(names="yangfan"){
+ print(paste("welcome",names,"to use r"),sep=" ")
+ }
> welcome()
[1] "welcome yangfan to use r"
下面编写一个模拟函数:求均值为5,方差为2的正态分布样本数据的t统计量
> simt<-function(n){
+ mu=5;sigma=2;
+ x<-rnorm(n,mu,sigma)
+ t=(mean(x)-mu)/(sd(x)/sqrt(n))
+ t
+ }
> simt(10)
[1] 0.245389
注意,写在同一行的要用分号,而不是逗号。
补充;curve(函数表达式,from,to,)是一个画图函数。
curve(cos,0,2*pi)
4:函数体和函数返回值
如果函数要求返回的值多于一个时,就需使用列表数据类型了
例如:我们要计算学生身高的平方和,平方积,及离均差平方和,函数如下。
> square<-function(x){
+ sum2=sum(x^2)
+ prob2=prod(x^2)
+ lxx=sum(x-mean(x))^2
+ list(sum2=sum2,prob2=prob2,lxx=lxx)
+
+ }
> s=square(ug$height)
> s
$sum2
[1] 1363038
$prob2
[1] 4.040259e+213
$lxx
[1] 2.067952e-25
3.1.3 控制语句
一、循环语句
这里主要介绍for循环。for循环允许循环使用向量和数列的每一个值。
for(变量 in取值向量){
表达式
}
> x.sum<-function(x){
+ n=length(x)
+ s=0
+ for(i in 1:n)
+ s=s+x[i]
+ s
+ }
> x.sum(1:10)
[1] 55
再举个非常有用的例子,加入要画样本含量n分别为20,30,50,100的正态随机数的分布直方图,我们可以用for循环一次完成。
> par(mfrow=c(2,2))#该命令将产生2*2个图
> for(n in c(20,30,50,100))
+ hist(rnorm(n),xlab='',main=paste('n=',n))
二、分支语句
(1)if/else 语句
if/else语句是分支语句中主要的语句,其格式为:
if(cond)statement1
if(cond)statement1 else statement2
> abs.x<-function(x){
+ if(x<0){x=-x}
+ x
+ }
> abs.x(-1)
[1] 1
> abs.x(c(-1,1))
[1] 1 -1
Warning message:
In if (x < 0) { :
the condition has length > 1 and only the first element will be used
这是个简单的求绝对值函数,但是当x为向量时,这个函数就会出错,我们可以把这个函数修改一下,改成
> abs.x<-function(x){
+ if(x[x<0]){
+ x[x<0]=-x[x<0]
+ }
+ x
+ }
> abs.x(c(-3,3))
[1] 3 3
(2)ifelse语句
在上面的if/else语句中,R中有一个更简洁的形式来表达ifelse语句;ifelse(test,yes,n