R语言编程

荆弘伟
2023-12-01

1.R语言编程特征

1.1 R语言数据结构

R语言数据结构其实以数据类型的方式出现,有数据框,数组、向量和矩阵,因子和列表。数据框dataframe是统计专业常用数据集,而因子factor是分类所用的方法,表明了R语言鲜明的经济统计色彩。向量vector类似一维数组,但是没有行名和列名,只有标签names。数组array包括一维数组,二维数组和三维数组和多维数组,三维数组有行、列和层,有行名rownames和列名colnames。矩阵matrix是二维数组,但是具有矩阵计算的性质。列表list不仅具有c语言结构struct的特征,而且性质是向量,因此是数据结构中的广义表。

R语言的数据结构中,没有树和图。树可用静态数组实现,应用索引方法。而图在软件包igraph中提供的函数实现,R语言的图称为网络数据格式,所以能分析生物结构和计算机网络。

1.2 R语言是高级语言

R语言有程序的控制结构和函数function。尽管R语言是解释型语言,但是可以用编译的方式实现,调用方法是source(file.R)命令。R语言的软件包能在编程环境中,通过子菜单下载后安装,因此是无障碍的。现在软件包有7000多,在统计、数学计算、金融数据分析、生物学、互联网数据分析,大数据、并行计算,混合编程、数据挖掘、数据分析方面有实际应用。

程序中加载软件包的命令,

>library(parallel)   #并行计算软件包,单线程多核

查找软件包中所有函数,

>library(help=parallel)

>help(packet=parallel)

R语言和解释型语言一样,没有变量声明。R语言能编写c++程序,应用Rcpp软件包。R语言没有独立的标量,仅仅循环语句使用标量作为循环变量。详细介绍见行业百科的R语言百科[4]

1.3 R语言编程风格

统计方式的R语言,称为数据操作,仅仅是用命令处理数据,将数据分组,参数估计与结果检验。金融数据分析,则是建立模型,检验模型数据拟合效果,因此数据操作好像没有明显的编程意义,实质上没有明显的程序风格。

但是,金融数据分析建立模型有标准过程,比如GARCH模型常有最少4个阶段或步骤,数据性质、ARCH效应、建立GARCH模型和模型拟合优度的检测与模型系数和参数调整。因此统计分析仍然有程序标准过程,因此能表现程序员的编程能力和特有风格。

计算机专业的R语言,称为编程的艺术。因子的应用方法、混合编程、并行程序设计、编写软件包,都是需要高超的编程技术和鲜明的编程风格,因此不同软件包的函数的程序运行时间不同。

R语言程序执行时间的函数是system.time(function),参数是系统执行的函数function。

2. R语言程序设计

2.1 R语言编程方法

R语言处理三种问题,1.数据操作。包括统计分析,例如有害健康调查时有多少吸烟的人,分组数据等; 2.金融数据分析,需要建立经济统计模型,例如建立ARIMA模型; 3.问题处理,譬如数据挖掘、高级语言程序设计、并行计算等。三个问题的编程方法不同。数据操作关键是根据每一个命令的结果选择下一个命令,需要丰富的实际经验和精明强干的问题控制能力。输出命令结果的方法有plot图,箱式图等,更高水平是应用高质量报表。高质量报表直观看和商场pos机的凭条类似,可根据精确的数据进行选择。建立经济统计模型的效果根据编程人员的专业能力决定。有时,模型数据拟合效果比较合理,然而不能进行详细的专业解释和问题分析,因此不能进一步提高模型的优度,使计算机辅助数据分析的功能受到减弱。建立模型的标准过程在教材和参考书中有分析,但是细节的掌握,表明了工作人员仔细的程度不同,程序的有效性、精确测度就不同。第三个问题是计算机专业人员应用R语言的问题,不仅要求计算机软件的编程能力和理论应用能力,而且对R语言的掌握有标准[1][2][3][5] 。 

2.2 计算机专业掌握R语言的标准

 (1)能用R语言程序处理数据框的所有问题,实现分组数据和统计 ,实现数据结构编程,例如树、图等。

 (2)能用R语言实现并行计算,windows系统的软件包parallel,Rmpi,snow等,多核和多计算机集群系统。

 (3)能用R语言实现混合编程,能实现多核多线程。譬如:C/C++,java,python,fortran。

 (4)能用R语言处理大量数据。能编写高性能程序处理几万条数据,实现大型数据库oracle和windows的SQL处理数据.

 (5)能用R语言实现图形界面。R语言是流程式语言,但是很难实现程序的图形界面。shiny软件包可实现HTML应用。

 (6)能用R语言生成高质量报表。直观地看R语言报表类似pos机的凭条。

 (7)能用R语言程序实现数据挖掘技术,比如k-means,关联规则等。能用R语言实现hadoop,实现对大数据的处理。

 (8)能用R语言实现数据分析,譬如:金融数据分析、生物、会计财务、商业与销售、电信与通信、交通、医疗、新药研发以及运输物流。

2.3 R语言并行计算

并行计算有实际应用的有多核多线程,例如python、java、c++,MPI和openMP,R语言软件包是parallel,Rmpi,snow等,以及GPU计算的CUDA,R语言使用gputools软件包。R语言并行计算能实现单线程多核与集群方式,但是问题是不能实现多核多线程,因此要在调用python、java和c++编程环境调用R语言程序。混合编程的程序执行时间是关注的问题,C++处理程序执行时间的函数见下。

1.Linux系统

在程序program1执行前,在命令行用参数time ./progarm1。程序实现方法则是:

#include<sys/time.h> #时间处理头文件

#include<stdio.h>

#include<math.h>#数学头文件

void functionsample(){  #需要执行的函数

   unsigned int i,j;

   double y;

   for(i=0;i<1000;i++)

      for(j=0;j<1000;j++)

          y=sin((double)i);    #计算正弦函数1000000次

}

main(){

struct timeval tpstart,tpend;

float timeuse;

gettimeofday(&tpstart,NULL);  #tpstart 开始时间

functionsample();   #执行函数functionsample

gettimeofday(&tpend,NULL);   #tpend  结束时间

timeuse=1000000*(tpend.tv_sec-tpstart.tv_sec)+ tpend.tv_usec-tpstart.tv_usec;

timeuse/=1000000;

printf("Used Time:%f\n",timeuse);  #float型变量

exit(0);

}

输出结果: Used Time:0.556070 (参考互联网文章)

2.windows系统

#include<time.h>

应用函数clock(),类型clock_t,返回程序执行开始到调用此函数间的时间段的毫秒数。clock_t是一个长整型,常量CLOCKS_PER_SEC 表示一秒钟有多少个时钟计时单元,常量定义见下。

#define CLOCKS_PER_SEC  ((clock_t)1000)

example1.计算循环语句的执行时间

int main(){  

clock_t  startTime, endTime;   #定义开始和结束时间

startTime = clock();  

for (int i = 0; i < 1000000; i++)  #需要计算执行时间的循环时间

{  i++;  

 }  

endTime=clock();  

cout << "Totle Time : " <<(double)(endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;  

     system("pause");  

return 0;  

}

2.4 R 语言编程的高级应用

(1)R语言编写高质量报表

table是R语言生成统计报表的基础。我们看到医学化验单、影像报表的形式,都是医学专业、简洁、数学表示的,R语言的统计和计算特征与此相似。制作高质量报表被称为“展示你最好的一面”。在R语言编程环境或RStudio图形环境下,R Markdown和knitr软件包可创建数据分析报告。R Mardown提供了简单语法生成分析报表,包括普通文字、R代码、以及行内代码。knitr在此基础上生成HTML、PDF、word文档格式的报告,以及幻灯片,并且可在指定位置生成R代码的执行结果。软件包knitr和rmarkdown。

library(knitr)

library(rmarkdown)

未完待续

转载地址:http://www.baike.com/wiki/R%E8%AF%AD%E8%A8%80%E7%BC%96%E7%A8%8B

【诗词曲赋】

                                                                                                      江城子

                                                                                                             苏轼

十年生死两茫茫。
不思量,自难忘。
千里孤坟,无处话凄凉。[1]
纵使相逢应不识,
尘满面,鬓如霜。

夜来幽梦忽还乡。
小轩窗,正梳妆。
相顾无言,惟有泪千行。
料得年年断肠处,
明月夜,短松冈。

注释[1]  苏轼纪念夫人

 类似资料: