t. stat <-function(x,y) {
n1<-length(x);n2<-length(y) X<-mean(x); Y<-mean(y) S1<-var(x); S2<-var(y)
S<-((n1-1)* S1+(n2-1)* S2)/( n1+n2-2) (X-Y)/sqrt(S*(1/n1+1/n2)) }
调用函数练习 例 已知两数据样本A和B,(见程序名exam0103.R), 或文本文件t1.txt(样本A数据)和t2.txt(样本B数据),计算量样本的统计量T。 解:或者按照exam0103.R程序执行(方法一); 或者在R操作窗口输入(方法二):
x<-scan(\ ##见第1页 执行结果:3.472245
注意:编写完的函数先运行一遍,才能调用它。 ........................................................完......................................... 有名参数与默认参数
1) 使用“name=object”的形式给出被调用函数中的参数名, 如name=t.stat,则这些参数可以按照任何顺序给出,如前面计算统计量,下面3种方法计算结果均相同: X<-scan(\
16
X<-scan(\X<-scan(\
2)编写R时可以采用默认参数,当函数被调用时,不输入参数系统自动选择默认参数: 定义计算样本的原点矩函数: moment<-function(x, k, mean=0)
########## mean为样本均值,默认值为0 sum((x-mean)^k)/length(x) ########计算样本的k阶原点矩
调用函数:
source(\
#####如果还没运行该函数,就用此代码调用它 X<-scan(\ moment(X,k=2)
#######也可在命令窗口中 直接输入 [1] 6403.324 ######结果
X<-scan(\ moment(X,k=2,mean=mean(X)) #######计算样本的中心矩 [1] 0.0005301775 ######结果
######注意:代码中的引号、括号、逗号都必须在R操作窗口 ######中打出的,或在英文下打出的,如在中文下打出的,R操
17
######作窗口不认。
递归函数: 可在函数自身内定义函数. 如计算n! (在文件factorial1.R里): fac = function(n) { f <- 1 if (n>0){ for(i in 1:n) f <- f * i } f }
上面的也可以用递归方法编写(在文件factorial2.R里): fac = function(n)
if (n <= 1) 1 else n * fac(n - 1)
调用函数:
source(\factorial1.R\n<-29 fac(n)
[1] 8.841762e+30 ######结果 source(\factorial2.R\
18
n<-29 fac(n)
[1] 8.841762e+30 ######结果一样 程序运行
1 建立自己的工作目录
可以用setwd(\选择自己设的工作目录\或“文件->改变工作目录”,如下图3
图3
双击“改变工作目录”,弹出“浏览文件夹窗口”,选择目录,按“确定”即可,在第一次退出时,保存工作空间,则子目录出现大个蓝色R的文件(后缀为.RData),以后再运行R时,双击这个蓝色R文件,所在的目录就是当前工作目录。
当保存脚本后,运行它,可把它打开,选择“编辑—>运行所有代码”,及运行了该文件。 2 工作空间
3 作用域:工作空间的变量为全局的,函数中的变量为局部的。 4 程序包:R系统中的自带函数,由各个程序包定义,可用search()
19
函数查看当前的程序包: > search() \
\
\
\ \ \\ \ \ 这9个是基本的程序包.
如果想知道程序包中包含了哪些函数,可用library ()函数,如library (help=\查看base中的函数。
给自定义的函数起名,最好与R系统中的函数名不要同名,若同名,可用包的名称加::调用R系统中的函数,如:base::t().
………………………………………..完………………………………………….
数值计算练习 一 矩阵运算:
1矩阵相乘: A %*% B表示两矩阵相乘(AB): 用%*% 符号 A<-matrix(1:9,nrow=3,byrow=T);A B<-matrix(1:9,nrow=3);B
C<-A %*% B ####表示两矩阵相乘 C
x<-1:3
A %*% x ####表示矩阵和向量相乘 x %*% A
2 矩阵转置: t( )为矩阵转置函数, AT 表示为t(A) A<-matrix(1:9,nrow=3,byrow=T);A t(A)
20