函数"/>
R中的函数
一、函数的定义格式为:
>name <- function(arg_1, arg_2, ...) expression
可以看做是:y=f(x)的写法。 expression是R的表达式,括号内是参数,放在函数最后的是返回值,返回值可以是向量,数组,列表,数据框。 R函数是一定要有返回值的。
二、函数的语句:
if:
switch:
for:
while:
repeat:
break,next:
二、函数的导入和应用
①函数可以以文件的形式写,然后存储为R文件,例如:newtest1.R
②导入函数:source("newtest1.R")即可直接在console中调用了。
③下面来看一个函数的实例:
f3=function(f,a,b,eps){
if(f(a)*f(b)>0)
list(fail="finding root is fail")
else{
repeat{
if(abs(b-a)<eps) break
x=(a+b)/2
if(f(a)*f(x)<0) b=x else a=x
}
list(root=(a+b)/2,fun=f(x))
}
}
上面的函数名字为f3,总共有4参数,原来真的不需要分号“;”。。。R的函数一定要有返回值,但是不用return,最后一行就是它的返回值。
回忆一下其他语言的函数写法:
Java:
public String saySomething(String x,String y){
System.out.pirntInt(x+y);
}
因为Java是纯面向对象的,所以定义函数每个参数特别繁琐。每个参数都有类型,每个函数都是调用了某个类的方法。
Python:
def saysomething(x,y):
print x+y
python是真的很简单,定义函数时候不需要对参数类型的定义事先定义。画外音:“我的空格确实是4个。。。”
下面分析上面的小函数:
首先if语句判断,并没有什么特别的,如果判定值是真,那么返回一个list的数据对象。
否则,如果为假,就用repeat函数迭代,最终返回一个list。
④另一个函数
7
已知两个样本A和B:
A:79.98 80.04 80.02 80.04 80.03 80.03 80.04 79.9780.05 80.03 80.02 80.00 80.02
B: 80.02 79.94 79.98 79.97 79.97 80.03 79.95 79.97
求两个样本的T统计量:
解答:函数的写法为:
T=function(x1,x2){
n1=length(x1)
n2=length(x2)
m1=mean(x1)
m2=mean(x2)
s1=var(x1)
s2=var(x2)
s=((n1-1)*s1+(n2-1)*s2)/(n1+n2-2)
(m1-m2)/sqrt(s*(1/n1+1/n2))
}
> A=c(1,2,3,4,5,6,7)
> B=c(3,4,2,5,4,4,7)
> T(A,B)
[1] -0.1414214
更多推荐
R中的函数
发布评论