本章将进一步介绍R的一些功能,这些功能对于我们撰写评价程序,都有直接的帮助。另外,本章将介绍一个让.NETFramework与R语言互通的模块-RdotNet。透过使用RdotNet,我们可以在C#的程序之中,直接使用R的功能。这让程序设计人员不用再花大量时间,去撰写一些复杂的统计、最适化、矩阵运算程序。使程序设计人员的生产力大幅提升,这是非常值得一试的软件。
第一节 函数档案的撰写
使用R语言可以建立自己的函数,以备程序呼叫之用。例如,一个二元二次方程式如下,
我们可以将之撰写为R函数如下,
> f <-function(x, y) {x^2 + 2*x*y + y^2 + 3*x - 5*y + 8}
> f(2,3)
[1] 24
我们将程序包含在大括号之内即可,表达式只有一行,也就是传回值。如果有多行的表达式,最后一行的表达式值,就是传回值。另外,也可使用return()送回传回值,方式可参考下面范例。
然而,我们也可将自行撰写的R函数以一般文本文件储存,在需要时直接引用。我们可以撰写Black-Scholes选择权公式的R函数如下,将之命名为BSFunction.R,并储存在D:\RProjects目录下,
#001 BSC <- function(S, K, T, v, r, q)
#002 {
#003 d1= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T))
#004 d2= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T)) - v*sqrt(T)
#005 C =S*exp(-q*T)*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
#006 return(C)
#007 }
#008 BSP <- function(S, K, T, v, r, q)
#009 {
#010 d1= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T))
#011 d2= (log(S/K) + (r-q+v^2/2)*T)/(v*sqrt(T)) - v*sqrt(T)
#012 P =K*exp(-r*T)*pnorm(-d2) - S*exp(-q*T)*pnorm(-d1)
#013 return(P)
#014 }
程序行表4.1.1(BSFunction.R)
#006行便是使用return()的方式,传回函数结果。
圖4.1.1
在使用上面的函数前,要先把BSFunction.R所在的路径告知R,我们可以使用setwd(),将档案目录D:\RProjects设为工作目录。以下面指令测试结果,source()告诉R我们要加载的函数文件名称,一旦加载后,便可如内建函数一样,直接使用BSC()与BSP()两函数。在最后面的范例中,S为向量[90,100, 110]代入BSC中,我们可以得到向量的输出[7.346566,12.318840, 18.532388]。
> setwd("D:\\RProjects")
> source("BSFunction.R")
> S = 100
> K = 100
> T = 1.0
> v = 0.3
> r = 0.06
> q = 0.04
> C = BSC(S, K, T, v, r, q)
> C
[1] 12.31884
> P = BSP(S, K, T, v, r, q)
> P
[1] 10.41635
> S = c(90, 100, 110)
> C = BSC(S, K,T, v, r, q)
> C
[1] 7.346566 12.318840 18.532388
一些常用的逻辑判断与循环叙述,架构如下。
一、条件判断
if(condition)
{
statements
}
if(condition)
{
True-statements
}
Else
{
False-statements
}
二、for循环
for(i in 1:n)
{
Loop-statements
}
三、while循环
while(condition)
{
Loop-statements
}
四、repeat循环
repeat
{
Loop-statements
if(condition) break
}
第二节 脚本的执行与数据文件的存取
一、脚本执行
我们可以把写好的R指令,预先储存在一个脚本文件之内,称之为脚本(Script)档,然后在R的交谈环境内,加载整批执行之。将下面内容存于RunBS.R之中,
source("BSFunction.R")
S = 100
K = 100
T = 1.0
v = 0.3
r = 0.06
q = 0.04
C = BSC(S, K,T, v, r, q)
P = BSP(S, K,T, v, r, q)
程序"BSRun.R"
在R的交谈环境内,如下执行即可。
圖4.2.1
二、资料文件存取
函数dump()可将数据对象以文本模式输出至档案,输出内容包括对象名称及内容值,是以脚本文件的方式存于档案内。
> x <-1:10
> y <-matrix(1:12, nrow=4, ncol=3)
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
>dump(c("x", "y"), file="D://RProjects//dump.dat")
可以使用source()函数取出。
> rm(x);rm(y)
> x
错误: 找不到物件 'x'
> y
错误: 找不到物件 'y'
>source("D://RProjects//dump.dat")
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y
[,1] [,2] [,3]
[1,] 1 5 9
[2,] 2 6 10
[3,] 3 7 11
[4,] 4 8 12
检视dump.dat内容如下,
x <-
1:10
y <-
structure(1:12, .Dim = c(4L, 3L))



雷达卡




京公网安备 11010802022788号







