第三章R语言基础---数据3.1无障碍学习编程语言的两个诀窍3.2R的基本数据类型(数值、字符、逻辑)of401习题3.3R的复合数据类型3.4数据的输入和输出3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of402在笔者已出版的《高级语言程序设计》(厦门大学出版社,2016,王小峰)一书中曾首次提出,学习编程语言是有诀窍的:建立编程语言和编程平台的宏观认识,理解编程语言的能动性及其受限原因;将编程语言真正当做“语言”,并选择英语语法进行类比学习。这些开创性的思想受到了许多读者的好评。由于本书重点面对没有编程基础的社会科学科研工作者,以“无障碍学习编程语言”为目的,笔者进一步提炼和升华出以下两个知识点。哲学思考编程“语言学”3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of403从哲学的角度了解编程语言,解决疑问:编程语言运行在什么地方?编程语言有什么功能(能做什么,不能做什么,为什么?)??“函数名”#若没有加载包,能查询函数所在包的信息,再查询该函数的信息,双引号可要可不要;1.哲学角度3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of404从哲学的角度了解编程语言,解决疑问:编程语言运行在什么地方?编程语言有什么功能(能做什么,不能做什么,为什么?)??“函数名”#若没有加载包,能查询函数所在包的信息,再查询该函数的信息,双引号可要可不要;2.语言学角度3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of405以时下最流行的Web客户端编程语言javascript为例,运行在浏览器作为功能受限制的脚本语言,能在浏览器中实现基本语言逻辑(词法、句法)并操纵网页元素,不能做其他任何出格的任务(浏览器安全沙箱),除非有功能扩展和用户授权。以R语言为例,初学者者可以认为其运行在RStudio中,能在RStudio中实现基本语言逻辑和基本的数据输入输出,听过安装和调用功能扩展包实现其他一切功能,安装(预装、扩展安装)功能包决定了R能做什么、不能做什么。3.1.1从“哲学”的角度了解编程语言3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of4061.英语语法主线语言的语法无外乎词法、句法、章法,如按照逻辑顺序梳理与展开,英语语法在宏观上大致如下:(1)词法,词、短语词、词短语;(2)简单句法,五种简单句:主谓、主谓宾、主谓宾宾补、主谓复合宾语、主系表;(3)复合句法,三种复合句:名词从句、形容词从句、副词从句;(4)复合句法的简化,动词的非谓语形式三种:不定式、动名词、分词;2.编程语言语法主线(程序=数据+代码)(1)数据:数据类型和复合数据类型(对应于词法);(2)基本代码:数据类型和运算符号,构成表达式和基本语句(对应于简单句法);(3)代码控制:流程控制,顺序、分支、循环三种流程操纵基本语句(对应于复合句法);(4)代码组合:代码复用,函数、类,对应于复合句法的简化;3.1.2从“语言学”的角度学习编程语言语法3.1无障碍学习编程语言的两个诀窍第三章R语言基础---数据of4073.1.2从“语言学”的角度学习编程语言语法R语言语法的学习线路图第三章R语言基础---数据3.2R的基本数据类型(数值、字符、逻辑)3.1无障碍学习编程语言的两个诀窍of408习题3.3R的复合数据类型3.4数据的输入和输出3.2R的基本数据类型(数字、字符、逻辑)第三章R语言基础---数据of4093.2.1基本数据类型“巧妇难为无米之炊”,学习数据统计与分析软件R,我们先得从数据讲起。将数据输入或导入到R后,首要工作就是要将数据表示(存储)在内存中,而针对不同的数据要采取不同的表示规则,这就体现为“数据类型”。基本数据类型,程序世界中物质的组成成分3.2R的基本数据类型(数字、字符、逻辑)第三章R语言基础---数据of40103.2.1基本数据类型无论是什么数据类型,都是通过符号定义变量名,再用直接书写的常量(所以也叫作“字面量”)对变量赋值(变量名=常量值或变量名-常量值);变量名等其他名字统称“标识符”,标识符的命名规范为:由中文(其他编程语言不一定支持中文变量名)、英文字母(区分大小写)、下划线、阿拉伯数字组成的字符序列,首字符不能是阿拉伯数字;不同数据类型的常量,其书写方式有所不同。例如数值常量-12,复数常量1+2i,字符常量a或字符串常量book,逻辑常量TRUE或FALSE。R的基本数据类型有四种:数值型、复数型(本书略)、字符型和逻辑型。首先,我们要记住如下三点:3.2R的基本数据类型(数字、字符、逻辑)第三章R语言基础---数据of40113.2.2数据类型的两个重要属性R语言使用属性来辅助性描述每个数据的信息,这在本质意味着任何数据(基本、复合类型的常量或变量)两个固有属性的不同:模式(就是数据类型)和长度。使用mode函数可以读取对象的模式(数据类型),使用as.数据类型可以改变对象的模式。四种基本数据类型的3类操作3.2R的基本数据类型(数字、字符、逻辑)第三章R语言基础---数据of40123.2.3两个特殊常量R中有两个特殊常量NA和NULL,分别表示数据的缺失和数据的未知两种状态,在程序运行的过程中,NULL会被直接剔除(而NA不会)。NA和NULL不能使用上述4种数据类型来描述。NA表示数据集中的某数据遗失。在对具有NA样本的变量进行函数操作时,该NA不会被直接剔除。要判断一个数据是否为NA或NULL,可以使用is.na和is.null函数。第三章R语言基础---数据3.3R的复合数据类型3.2R的基本数据类型(数值、字符、逻辑)of4013习题3.1无障碍学习编程语言的两个诀窍3.4数据的输入和输出3.3R的复合数据类型第三章R语言基础---数据of4014什么是复合数据类型?如果木头是基本数据类型,那么各种木制器具就是复合数据类型3.3R的复合数据类型第三章R语言基础---数据of4015R的五种复合数据类型R提供了五种内置的复合数据类型(预定义数据结构)3.3R的复合数据类型第三章R语言基础---数据of40163.3.1向量a-c(1,2,3,4)b-c(US,CHINA,ENGLISH)c-c(TRUE,TRUE,FALSE)向量是用于存储数值型、字符型或逻辑型数据的一维数组。执行组合功能的函数c()可用来创建向量。注意:单个向量中的数据必须拥有相同的类型或模式(数值型、字符型或逻辑型)。同一向量中无法混杂不同模式的数据。3.3R的复合数据类型第三章R语言基础---数据of40173.3.2矩阵y-matrix(1:20,nrow=5,ncol=4)运行结果为:[,1][,2][,3][,4][1,]161116[2,]271217[3,]381318[4,]491419[5,]5101520矩阵是一个二维数组,只是每个元素都拥有相同的模式(数值型、字符型或逻辑型)。可通过函数matrix创建矩阵。注意:矩阵中的数据也只能拥有一种模式(即数据类型)。3.3R的复合数据类型第三章R语言基础---数据of40183.3.3数组xnames-c(x1,x2)ynames-c(y1,y2,y3)znames-c(z1,z2,z3,z4)z-array(1:24,c(2,3,4),list(xnames,ynames,znames))z数组(array)与矩阵类似,但是维度可以大于2。数组可通过array函数创建。注意:和矩阵一样,数组中的数据也只能拥有一种模式(即数据类型)。但显然数组是矩阵的自然推广,且在编写新的统计方法时将会非常有用。运行结果为:,,z1y1y2y3x1135x2246,,z2y1y2y3x17911x281012,,z3y1y2y3x1131517x2141618,,z4y1y2y3x1192123x22022243.3R的复合数据类型第三章R语言基础---数据of40193.3.4数据框PatientID-c(1,2,3,4)AdmDate-as.Date(c(2017-08-1,2016-11-01,2016-12-21,2017-10-01))Age-c(25,34,28,52)Diabetes-c(Type1,Type2,Type1,Type1)Status-c(Poor,Improved,Excellent,Poor)x-data.frame(PatientID,AdmDate,Age,Diabetes,Status)X运行结果:PatientIDAdmDateAgeDiabetesStatus12017-08-0125Type1Poor22016-11-0134Type2Improved32016-12-2128Type1Excellent42017-10-0152Type1Poor与前面的数据类型不同,数据框是一种可以由不同模式/基本数据类型(数值型、字符型等)的数据构成的复合数据类型。显然数据框将是R中最常用的数据结构,其概念较矩阵来说更为一般。3.3R的复合数据类型第三章R语言基础---数据of40203.3.5列表列表(list)是R的数据类型中最为复杂的一种。一般来说,列表就是一些对象(或成分,component)的有序(数字排序,下标从1开始)集合。列表允许你整合若干(可能无关的)对象到单个对象名下。例如,某个列表中可能是若干向量、矩阵、数据框,甚至其他列表的组合。可以使用函数list()创建列表:mylist-list(object1,object2,……),其中的objecti可以是其他的任何数据结构。3.3R的复合数据类型第三章R语言基础---数据of40213.3.5列表g-myfirstlisth-c(26,26,18,29)j-matrix(1:10,nrow=5)k-data.frame(c(1,2),c(code,name))mylist-list(title=g,ages=h,j,k)#可以为列表中的对象增加关联名以方便检索mylist可以使用函数list()创建列表:mylist-list(object1,object2,……),其中的objecti可以是其他的任何数据结构。3.3R的复合数据类型第三章R语言基础---数据of40223.3.5列表运行结果为:$title[1]myfirstlist$ages[1]26261829[[3]][,1][,2][1,]16[2,]27[3,]38[4,]49[5,]510[[4]]c.1..2.c..code....name..11code22name3.3R的复合数据类型第三章R语言基础---数据of40233.3.6因子略3.3.7时间序列第三章R语言基础---数据3.4数据的输入和输出3.2R的基本数据类型(数值、字符、逻辑)of4024习题3.3R的复合数据类型3.1无障碍学习编程语言的两个诀窍3.4数据的输入与导出第三章R语言基础---数据of40253.4.1数据的输入可供R导入的数据源R的数据主要来自于外部数据的导入,在进行计算、分析后又可以将数据导出。为此,R提供了适用范围广泛的数据导入方式。如下图所示,R可从键盘、文本文件、Excel和Access、流行的统计软件、特殊格式的文件,以及多种关系型数据库中导入数据。3.4数据的输入与导出第三章R语言基础---数据of40261键盘输入R的数据主要来自于外部数据的导入,在进行计算、分析后又可以将数据导出。为此,R提供了适用范围广泛的数据导入方式。如下图所示,R可从键盘、文本文件、Excel和Access、流行的统计软件、特殊格式的文件,以及多种关系型数据库中导入数据。创建一个空数据框(或矩阵),其中变量名和变量的模式需与理想中的最终数据集一致;针对这个数据对象调用文本编辑器,输入你的数据,并将结果保存回此数据对象中;mydata-data.frame(id=numeric(0),