版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能数据分析:基于R语言IntelligentDataAnalyticswithR第3章基础编程:工欲善其事,必先利其器课程体系R语言数据分析上篇:问道中篇:执具第3章基础编程:工欲善其事,必先利其器第4章数据对象:万法归宗,数据为本第1章绪论:气象万千,数以等观第2章方法论:所谓学习,归类而已下篇:博术第5章认识数据:观数以形,辨形以识数第6章关联:相随相伴,谓之关联第7章分类:既是世间法,自当有分别第8章聚类:方以类聚,物以群分工欲善其事、必先利其器筷子,是延伸我们身体最好的工具几乎人人都达到了“日用而不知”的境界(图片来自网络)工欲善其事、必先利其器代码,是延伸我们思想最好的工具EverythingbecamemuchclearerwhenIstartedwritingcode(http://karpathy.github.io/neuralnets)(图片来自网络)编程语言排行榜/tiobe-index//http://pypl.github.io/PYPL.htmlhttps:///static/interactive-the-top-programming-languages-2019https:///sogrady/2019/03/20/language-rankings-1-19/编程语言排行榜/tiobe-index/AccessedonSep.13,2020编程语言排行榜/tiobe-index/AccessedonSep.13,2020编程语言排行榜/tiobe-index/AccessedonOct.14,2025编程语言排行榜https://pypl.github.io/PYPL.htmlAccessedonOct.14,2025假如非要比较的话RPythonEleganceClearwinforPython.LearningcurveHugewinforRAvailablelibrariesforDataScienceSlightedgetoRMachinelearningSlightedgetoPythonhere.StatisticalsophisticationBigwinforR.ParallelcomputationLet'scallitatie.C/C++interfaceandperformanceenhancementSlightwinforR.Objectorientation,metaprogrammingSlightwinforR.LanguageunitySadlossforR.LinkeddatastructuresWinforPythonOnlinehelpBigwinforR./matloff/R-vs.-Python-for-Data-ScienceR和Python:共生而非竞争http://r4ds.had.co.nz/introduction.html#python-julia-and-friends常用模式识别与机器学习软件平台(图片来自网络)简洁明了的R交互界面简洁明了的R交互界面R是如此简约,都快赶上cmd了^-^简洁明了的R交互界面R是如此简约,都快赶上cmd了^-^简约而不简单:描述性分析简约而不简单:描述性分析简约而不简单:相关性分析简约而不简单:相关性分析简约而不简单:关联规则简约而不简单:决策树简约而不简单:层次聚类简约而不简单:时间序列简约而不简单:信号处理简约而不简单:信号处理简约而不简单:图像处理简约而不简单:人脸识别简约而不简单:复杂网络简约而不简单:复杂网络简约而不简单:几乎无所不能简约而不简单:几乎无所不能钟情于数据的小伙伴们一起来学R吧,数据分析是一片广阔的天地那里大有可为(图片来自网络)R语言如何学学会了哪些知识才算掌握了R语言有关R语言的三段论R语言≈
基础编程+数据对象大前提:计算机语言程序=算法+数据结构小前提:R也不过是计算机语言的一种结论:R语言的内容体系R语言基础编程数据对象向量/因子矩阵/数组列表/数据框R的运行机制/编程环境代码的组成/扩展包、函数的调用基本控制流编写函数/二元操作符/泛型函数编程环境编程环境运行机制翻译执行机构R编程至简配置文本编辑器:编写代码如SublimeRConsole:运行代码R语言专用IDER语言专用IDEhttps://posit.co/
(AccessedonSep.18,2025)R语言专用IDESTEP1STEP2登录/DownloadR一直点击Next直到OK登录/下载最新版RStudio的ZIP文件解压缩至合适的路径R编程环境配置①源码组织管理②包安装、更新③绘图
④源码编辑⑤数据对象显示⑧代码历史记录⑨数据对象列表
⑥代码执行⑦控制台输出R编程环境配置R编程环境配置RStudioRConsoleNotebook语法高亮代码补全自动排版注释/代码……文件组织数据查看代码调试……R编程环境配置重新总结一下安装步骤:Step01:从/上downloadR并安装Step02:从/处下载RStudio并解压缩建议将R安装在C:\ProgramFiles文件夹下;安装完之后将library文件夹权限设置为完全读写RStudio建议下载免安装版,可解压缩在D:适当位置RStudio解压缩路径不能有中文;同时,RStudio运行时部分文件置于C:\Users\byaxb\AppData\Local\RStudio-Desktop之下,故系统用户名(此处为byaxb)不要用中文,否则可能出现无菜单情形程序执行的快捷键,可以设置为玩游戏时的快捷键R编程环境配置RStudio安装(解压缩)路径和配置文件路径中不能有中文R编程环境配置配置好的RStudioR编程环境配置https://docs.posit.co/ide/user/ide/guide/tools/copilot.htmlR编程环境配置为了提高生产力,建议配置好:RStudio+CopilotR编程环境配置Copilot辅助编程效果图:Copilot状态栏根据注释自动生成代码R语言基础编程数据对象向量/因子矩阵/数组列表/数据框R的运行机制/编程环境代码的组成/扩展包、函数的调用基本控制流编写函数/二元操作符/泛型函数R语言的内容体系学生文理分科Mini案例(图片来自网络)xm:姓名 bj:班级 xb:性别 yw:语文 sx:数学 wy:外语zz:政治 ls:历史 dl:地理 hx:化学 sw:生物 wlfk:文理分科本数据集可从/byaxb/RDataAnalytics下载学生成绩表R语言数据分析Mini案例#读取数据library(readxl)cjb<-read_excel("data/cjb.xlsx")View(cjb)#对数据进行探索性分析library(tidyverse)cjb%>%select(sx,wlfk)%>%ggplot(aes(x=wlfk,y=sx,fill=wlfk))+geom_boxplot(width=0.5)R语言数据分析Mini案例R语言数据分析Mini案例#读取数据library(readxl)cjb<-read_excel("data/cjb.xlsx")View(cjb)#对数据进行探索性分析library(tidyverse)cjb%>%
select(sx,wlfk)%>%
ggplot(aes(x=wlfk,y=sx,fill=wlfk))+
geom_boxplot(width=0.5)R语言数据分析Mini案例R语言数据分析Mini案例#数据预处理as_five_grade_scores<-function(x){
cut(x,breaks=c(0,seq(60,100,by=10)),labels=c("不及格","及格","中","良","优"))}cjb<-cjb%>%
mutate(zcj=rowSums(.[4:12]))%>%
filter(zcj!=0)%>%#剔除脏数据
mutate_at(vars(xb,wlfk),factor)%>%#类型转换
mutate_at(vars(yw:sw),as_five_grade_scores)#数据分箱View(cjb)R语言数据分析Mini案例R语言数据分析Mini案例#建模library(arulesViz)my_model<-cjb%>%
select(xb:wlfk)%>%
apriori(parameter=list(supp=0.06,conf=0.8),appearance=list(rhs=paste0("wlfk=",c("文科","理科"))))#模型评估inspectDT(my_model)#可视化plot(my_model)R语言数据分析Mini案例R语言数据分析Mini案例R仅有的命令形式是返回结果的函数和表达式赋值是一种常见的操作:对象的读取、转换、模型的建立等赋值给新的对象,往往也就意味着数据的流转:读取、转换、探索、建模、评估等操作R语言数据分析Mini案例abs()sqrt()log()sin()library()View()ggplot()aes()c()select()apriori()inspect()plot()函数my_modelcjbxas_five_grade_scores对象=-><-->>+-*/%%%>%==>=<=!=[]&|&&||:运算符R语言数据分析Mini案例R语言数据分析Mini案例R语言设计理念以下部分观点来自《S,R,anddatascience》J.M.Chambers,“S,R,anddatascience,”Proc.ACMProgram.Lang.,vol.4,no.HOPL,pp.1–17,Jun.2020,doi:10.1145/3386334.R语言设计理念对象(Objects)R中存在的所有事物都是对象(EverythingthatexistsinRisanobject)函数(Functions)R中发生的所有事情都是函数调用(EverythingthathappensinRisafunctioncall)。接口(Interfaces)与其他语言的接口是R的一部分(InterfacestootherlanguagesareapartofR)包(Packages)R是一个开源生态,经验丰富的数据分析人员通过扩展包来分享他们的拓展和应用。和其他一些开源生态相比,R扩展包更加严格,由文档、源代码、数据文件等组成,具有更强的易用性。对于R在未来对数据科学的贡献而言,也许R最重要的特性就是其包结构(Forthefutureofitscontributionstodatascience,perhapsthemostimportantfeatureofRwasthepackagestructure)。如果说我看得比别人更远些,那是因为我站在巨人的肩膀上IfIhaveseenfurther,itisbystandingontheshouldersofgiants站在巨人的肩膀上(图片来自网络)人们常说,伟大的科学学科就像是站在其它巨人肩膀上的巨人。人们也说过,软件产业正如站在其他侏儒脚上的侏儒(AlanCooper,交互设计之父)Ithasbeensaidthatthegreatscientificdisciplinesareexamplesofgiantsstandingontheshouldersofothergiants.Ithasalsobeensaidthatthesoftwareindustryisanexampleofmidgetsstandingonthetoesofothermidgets(AlanCooper)站在巨人的肩膀上(图片来自网络)ThegreatbeautyofRisthatyoucanmodifyittodoallsortsofthings.Andyouhavealotofprepackagedstuffthat’salreadyavailable,soyou’restandingontheshouldersofgiants.(Google,HalRonaldVarian)站在巨人的肩膀上(图片来自网络)扩展包函数语句语句函数语句语句站在巨人的肩膀上扩展包函数语句语句函数语句语句回到Mini小案例R语言编程人员的定位应该是帅才需要的是统率三军充分调动属于某个战队(包)的单兵(函数)去完成你想要的任务而不是一切从零开始***作战单位为单兵基础编程(图片来自网络)用别人的包和函数讲述你自己的故事R编程=R编程第一法则如何找到想要的包,野蛮遍历?大海捞针第1种:看看TV第2种:逛逛论坛SO第3种:再不行就SOS大海捞针大法第1种:看看TV官方导航,对R庞大的生态做了一个粗略的划分第2种:逛逛论坛SO第3种:再不行就SOS大海捞针大法:TVCRANtaskviewsaimtoprovidesomeguidancewhichpackagesonCRANarerelevantfortasksrelatedtoacertaintopic.Cluster ClusterAnalysis&FiniteMixtureModelsHighPerformanceComputing High-PerformanceandParallelComputingwithRMachineLearning MachineLearning&StatisticalLearningMissingData MissingDataModelDeployment ModelDeploymentwithRNaturalLanguageProcessing NaturalLanguageProcessingNumericalMathematics NumericalMathematicsReproducibleResearch ReproducibleResearchSpatial AnalysisofSpatialDataTimeSeries TimeSeriesAnalysis大海捞针大法:TV/web/views/MachineLearning.html大海捞针大法:TV第1种:看看TV第2种:逛逛论坛SO/questions/tagged/r如果没有它,很多人都不知道怎么编代码第3种:再不行就SOS大海捞针大法:SO/tags大海捞针大法:SO第1种:看看TV第2种:逛逛论坛SO第3种:再不行就SOS安装sos包利用findFn()函数进行模糊查找大海捞针大法:SOS大海捞针大法:SOS/starred扩展包:MoststarsatGitHub/thedataincubator/data-science-blogs/blob/master/top-r-packages.md(AccessedonMay20,2018)扩展包:机器学习与数据挖掘#caret包所支持的模型library(caret)library(tidyverse)modelLookup()%>%
select(-(2:3))%>%
distinct()%>%
View()扩展包:机器学习与数据挖掘=====数据读取====fs:文件系统readr:实现表格数据的快速导入readxl:读取MicrosoftExcel电子表格数据rvest:网页数据抓取包RMySQL:用于连接MySQL数据库的R包=====探索性分析=====Hmisc:统计描述ggplot2及其扩展GGally:绘制散点图矩阵leaflet:绘制交互式地图plotly:交互式绘图包可视化:TaskViews>Graphics扩展包地图:机器学习与数据挖掘====数据处理、类型转换等====tidyverse:长宽变换、更改、分组统计等data.table:用于快速处理大数据集stringr、stringi:一个字符串处理工具集lubridate:用于处理日期时间数据xts:时间序列Matrix:著名的稀疏矩阵包====缺失值处理====TaskViews>MissingDataVIM:缺失值处理mice:缺失值处理====降维====psych、vegan、MASS:主成分析、因子分析、MDS扩展包地图:机器学习与数据挖掘=====典型算法模型====caret:分类与回归框架包tidymodels:机器学习框架包mlr3:框架包randomForest:随机森林rpart:树模型arules:频繁项集与关联e1071:比较流行的机器学习包cluster:聚类分析factoextra:聚类分析及其可视化神经网络与深度学习:nnet、RSNNS、deepnet、RcppDL、h2o、tensorflow等扩展包地图:机器学习与数据挖掘====模型选择与验证====caret:自带多种评估指标,支持格子点搜索e1071:自带多种评估指标ROCR:通过绘图来可视化分类器的综合性能MLmetrics:提供了多种指标NBclust:聚类分析性能评估扩展包地图:机器学习与数据挖掘=====结果交流====rmarkdown:可重复性报告和动态文档knitr:用于在PDF和HTML文档中嵌入R代码块flexdashboard:创建仪表盘=====模型部署====pmml:转换成PMMLplumber:webAPI接口shiny:交互式web应用扩展包地图:机器学习与数据挖掘(图片来自网络)扩展包地图:机器学习与数据挖掘/mlverse扩展包地图:机器学习与数据挖掘/packages/image-processing/xm<-c("周黎","汤海明","舒江辉","翁柯","祁强","湛容")?c利用好帮助文档xm<-c("周黎","汤海明","舒江辉","翁柯","祁强","湛容")?c利用好帮助文档xm<-c("周黎","汤海明","舒江辉","翁柯","祁强","湛容")?c利用好帮助文档用别人的包和函数讲述你自己的故事R编程=R编程第一法则R语言基础编程数据对象向量/因子矩阵/数组列表/数据框R的运行机制/编程环境代码的组成/扩展包、函数的调用基本控制流编写函数/二元操作符/泛型函数R语言的内容体系R语言基础编程数据对象向量/因子矩阵/数组列表/数据框R的运行机制/编程环境代码的组成/扩展包、函数的调用基本控制流编写函数/二元操作符/泛型函数R语言的内容体系任何简单或复杂的逻辑都可以由顺序、分支和循环这三种基本结构组合而成结构化编程(图片来自网络)把大象放进冰箱,总共需要几步?顺序结构(图片来自网络)#创建3个向量yw<-c(94,87,92,91,85,92)#6个同学的语文成绩sx<-c(82,94,79,84,92,82)#数学成绩wy<-c(96,89,86,96,82,85)#外语成绩ysw<-yw+sx+wy#向量化操作:三科成绩相加ysw#显示三科成绩#>[1]274272259273261261(yw<-yw+2)#向量化操作:每个同学语文成绩加2分#>[1]968994938794顺序结构(mean_score<-mean(yw))#求语文平均分#>[1]92.16667sd(yw)#求语文成绩标准差(sd_score<-(1/(6-1)*sum((yw-mean_score)^2))^0.5)#>[1]3.430258c(sd(yw),sd(sx),sd(wy))#>[1]3.4302586.0580525.865151(z_score_yw<-(yw-mean_score)/sd_score)#求标准得分#>[1]1.12-0.920.530.24-1.510.53
顺序结构show(yw)#显示语文成绩#>[1]968994938794show(sx)#显示数学成绩#>[1]829479849282yw>=90#向量化操作:逻辑判断#>[1]TRUEFALSETRUETRUEFALSETRUEyw>=85&sx>=85#向量化操作:逻辑判断#>[1]FALSETRUEFALSEFALSETRUEFALSEyw>=95|sx>=95
#向量化操作:逻辑判断#>[1]TRUEFALSEFALSEFALSEFALSEFALSE顺序结构条件表达式根据条件而执行不同的代码if(条件){cons.expr}else{alt.expr}注意:条件为一个标量的真或假值else子句如果存在的话,必须和}在同一行分支结构min_score<-min(yw)#语文最低成绩87if(min_score>=90){
message(“语文成绩全部为优”)#控制台输出消息}elseif(min_score>=80){
message("语文成绩至少为良")}else{
message("并非所有同学语文成绩均为优良")}#>语文成绩至少为良分支结构yw>=90#>[1]TRUEFALSETRUETRUEFALSETRUEall(yw>=90)#逻辑向量每一个值均为TRUE时,返回TRUE;否则返回FALSE#>[1]FALSEif(all(yw>=90)){
message("语文成绩全部为优")}elseif(all(yw>=80)){
message("语文成绩至少为良")}else{
message("并非所有同学语文成绩均为优良")}分支结构show(yw)#>[1]968994938794any(yw<88)#逻辑向量中只有有一个为TRUE,返回TRUE;否则返回FALSE#>[1]TRUEany(c(FALSE,FALSE,FALSE,FALSE,TRUE,FALSE))if(any(yw<60)){
message("有同学语文成绩挂科")}else{
message("所有同学语文考试顺利通过")}#>所有同学语文考试顺利通过分支结构if(all(yw>=90)){
message("语文成绩全部为优")}elseif(all(yw>=80)){#else不能单起一行
message("语文成绩至少为良")}else{#else不能单起一行
message("并非所有同学语文成绩均为优良")}#>Error:unexpected'else'in"else“#>Error:unexpected'}'in"}"分支结构yw>90#>[1]TRUEFALSETRUETRUEFALSETRUEif(yw>90){
message("所有同学语文成绩均为优")}#>所有同学语文成绩均为优#>Warningmessage:#>Inif(yw>90){:#>theconditionhaslength>1andonlythefirstelementwillbeused相当于if((yw>90)[1]){}分支结构yw#>[1]968994938794ifelse(yw>=90,"优","非优")#>[1]"优""非优""优""优""非优""优"ifelse(yw>=90,"优",
ifelse(yw>=88,“较好”,“一般"))#>[1]"优“"较好“"优“"优“"一般“"优"分支结构yw#[1]968994938794ifelse(yw>=90,
"优",
ifelse(yw>=88,“较好”,“一般"))#>[1]"优“"较好“"优“"优“"一般“"优"TRUEFALSETRUETRUEFALSETRUE"优""优""优""优""优""优""较好""较好""较好""较好""一般""较好"分支结构三种语句实现循环for:已知迭代次数或遍历集合while:条件满足时循环(次数未知)repeat:无条件循环(须通过break跳出循环)两种语句用于控制循环break语句可以从当前运行的循环里面跳出next跳过当前迭代,进入下一次循环,next后面的语句不会被执行循环结构循环结构:斐波那契数列Fibonacci数列:1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,……(图片来自网络)#for循环求斐波那契数列的前16个数n_fib<-16fib<-numeric(n_fib)fib[1:2]<-c(1,1)for(iin3:n_fib){fib[i]<-fib[i-1]+fib[i-2]
show(fib[i])}fib#>[1]1123581321345589144233377610987循环结构#求1000以内的斐波那契数列#不知道循环多少次,仅知道终止条件,通过while来实现fib<-c(1,1)while(sum(tail(fib,2))<1000){fib<-c(fib,sum(tail(fib,2)))}fib#>[1]1123581321345589144233377610987循环结构#也可以通过repeat来无条件循环,直到满足某个条件时breakfib<-c(1,1)repeat{
if(sum(tail(fib,2))>=1000){
break}fib<-c(fib,sum(tail(fib,2)))}fib#[1]1123581321345589144233377610987循环结构#repeat来实现fib<-c(1,1)while(TRUE){#repeat==while(TRUE)
if(sum(tail(fib,2))>=1000){
break}fib<-c(fib,sum(tail(fib,2)))}fib#[1]1123581321345589144233377610987循环结构#再尝试一个例子:幸运52time_count<-0repeat{my_number<-sample(100,1)time_count<-time_count+1
if(my_number==52){
message("Haha~,Ifinallygot'52'after",time_count,"times")
break}else{
message(time_count,
":Notluckyenough[",my_number,"]")}}循环结构#>1:Notluckyenough[42]#>2:Notluckyenough[4]#>3:Notluckyenough[7]……#>18:Notluckyenough[4]#>19:Notluckyenough[66]#>20:Notluckyenough[5]#>21:Notluckyenough[92]#>Haha~,Ifinallygot'52'after22attempts循环结构#尽量不要使用显式循环#能向量化运算的,尽量向量化x<-1:1e8
#一亿y<-2:(1e8+1)#一亿z<-integer(1e8)system.time(z<-x+y,gcFirst=TRUE)#>usersystemelapsed#>0.360.090.45再说向量化system.time({
for(iin1:1e8){z[i]<-x[i]+y[i]}},gcFirst=TRUE)#>usersystemelapsed#>11.510.0611.70再说向量化在R里边只要串行模式不是必须的(本轮循环语句不受上一轮影响)请采用并行模式尽量避免显式循环#其实,连斐波那契数列也可以采用并行的方式n_fib<-16sapply(1:n_fib,function(x){
1/sqrt(5)*(((1+sqrt(5))/2)^x-((1-sqrt(5))/2)^x)})#>[1]1123581321345589144233377610987
斐波那契数列的另一种实现高阶for:进度条#通过pbfor::pbfor()增加循环进度条pbfor::pb_for()for(iin1:100){
Sys.sleep(0.5)}高阶for:并行计算#循环过程的并行运算library(doSNOW)library(foreach)cl<-makeCluster(parallel::detectCores()-1)registerDoSNOW(cl)results<-foreach(i=seq(0,1,length.out=I_REPEAT_TIMES))%:%
foreach(j=1:N_REPEAT)%dopar%{#todo}stopCluster(cl)向量化函数sqrt(),sin(),round(),as.numeric(),cut()weekdays(),+,-,*,/,&,|,%in%,……
split-apply-combine数据处理模式
如:apply函数簇
再比如:tidyverse扩展包套装dplyr::group_by+summarise专门的并行主题
TASKVIEWS:High-PerformanceandParallelComputingwithRparallel::mclapply(),foreach::foreach(),…R里边的并行作业R语言基础编程数据对象向量/因子矩阵/数组列表/数据框R的运行机制/编程环境代码的组成/扩展包、函数的调用基本控制流编写函数/二元操作符/泛型函数R语言的内容体系R语言数据分析Mini案例copy-and-paste两种不同的写法Youshouldconsiderwritingafunctionwheneveryou’vecopiedandpastedablockofcodemorethantwice(i.e.younowhavethreecopiesofthesamecode).—HadleyWickham,ChiefScientistatRstudio图片来自:http://hadley.nz/什么时候需要编写函数Ruleofthree:thecodecanbecopiedonce,butthatwhenthesamecodeisusedthreetimes,itshouldbeextractedintoanewprocedureDonotRepeatYourself(orDRY)principleSeparationofConcerns其它一些编码法则请参阅:/wiki/Don%27t_repeat_yourself什么时候需要编写函数(图片来自网络)fun_name<-function(arg1,arg2
=default1,…){
#注释表达式(循环/判别/……)
return(返回值)}R里边一切都是对象,对象通过赋值来产生,函数也不例外函数声明关键字是function,function返回值就是函数参数列表是以逗号分割,函数主体可以是任何合法的R表达式,通常是一组由大括弧{和}括起来的表达式若无return语句,最后一个表达式的值作为返回值以fun_name(arg1,arg2,…)的形式调用函数编写函数#摄氏度(Celsius)到华氏度(Fahrenheit)的转换ce2fa<-function(ce){#参数ce为输入
fa<-1.8*ce+32
#对输入进行处理
return(fa)#输出相应的值}ce2fa(0)#0℃相当于32℉#>[1]32ce2fa(0:10)#将0~10℃转换为相应的℉#>[1]32.033.835.637.439.241.042.844.646.448.250.0函数的定义ce2fa#>function(ce){#参数ce为输入#>fa<-1.8*ce+32#对输入进行处理#>return(fa)#输出相应的值#>}#><bytecode:0x00000000144b5d28>函数的定义#位置参数和名义参数frm<-function(name,frm="BUPT"){
cat(name,"isfrm",frm)}frm()#出错#>Errorincat(name,"isfrm",frm):#>argument"name"ismissing,withnodefaultfrm("axb")#参数的缺省值#>axbisfrmBUPT位置参数和名义参数#位置参数和名义参数frm<-function(name,frm="BUPT"){
cat(name,"isfrm",frm)}frm(name="AXB",frm="BJTU")frm(“AXB”,“BJTU”)#和上述语句等价#>AXBisfrmBJTUfrm(frm="BJTU",name="AXB")#>AXBisfrmBJTU位置参数和名义参数#看几行我们比较熟悉的代码xm<-c("周黎","汤海明","舒江辉","翁柯","祁强","湛容")yw<-c(94,87,92,91,85,92)xb<-c(FALSE,TRUE,TRUE)#再看看sum函数sum(94,87,92,91,85,92)sum(1,3,5,7)?c?sum特殊的参数…...可以包含任意多的参数。它通常在参数个数未知或者某些参数会传递给其它函数的情况下使用特殊的参数…my_func<-function(...){
cat(“Thesecondargis”,..2)#第二个参数dot_args<-list(...)#通过list来捕捉任意参数
message("\nThesumis",sum(dot_args[[1]],dot_args[[5]]))}my_func(1,'arg2',3,4,5,6,7,8)#>Thesecondargisarg2#>Thesumis6特殊的参数…#+、-、*、/其实都是函数1+2"+"(1,2)#>[1]3'/'(2,3)#>[1]0.6666667'^'(10,2)#>[1]100“>"(2,1)#[1]TRUE'<-'(new_var,3)new_var#>[1]3#:本质上也是一个函数':'(1,10)#>[1]12345678910#下标也是函数'['(1:10,2)#>[1]2熟而不觉的函数:作为函数的二元操作符#%in%运算符:左侧的每个元素是否在右侧的集合之中c(1,3,9)%in%
1:3'%in%'(c(1,3,9),1:3)#>[1]TRUETRUEFALSE#自己定义二元操作符函数:a、b为直角边,c为斜边"%ab2c%"
<-function(a,b){
sqrt(sum(a^2,b^2))}3%ab2c%4#[1]5熟而不觉的函数:作为函数的二元操作符#看完%ab2c%之后,对下边的符号,也就觉得不过如此了library(purrr)x<-c(17,28,17,12,15,12,49)x%>%
unique()%>%
sort()#等价于下边的代码,不过是更加简洁优雅x<-c(17,28,17,12,15,12,49)x2<-unique(x)x3<-sort(x2)x3#>[1]1215172849熟而不觉的函数:作为函数的二元操作符5+2#>[1]7#来点恶作剧"+"<-function(x,y){x*y}5+2
#[1]10rm(“+”)#消除恶作剧的+运算5+2#>[1]7熟而不觉的函数:作为函数的二元操作符#特殊函数的帮助文档?"+"#双引号?'+'#单引号?`+`#反单引号?'%in%'?'round‘?round熟而不觉的函数:帮助文档的查询x<-seq(1,100,by=10)y<-2*x+10xy<-cbind(x,y)class(xy)#>[1]"matrix"plot(xy,xlim=c(1,100),ylim=c(0,230),type="o",col="red")不一样的plotx<-seq(1,100,by=10)y<-2*x+10my_model<-lm(y~x)class(my_model)#>[1]"lm"op<-par(mfrow=c(2,2))plot(my_model)par(op)不一样的plot泛型函数:见什么人说什么话,到什么山上唱什么歌泛型函数(图片来自网络)interface<-function(x,y){
message("Singleinterface")
UseMethod(“particular",y)}particular.classA<-function(x,y){
message("Differentbehavior:classA")}particular.classB<-function(x,y){
message("Differentbehavior:classB")}particular.default<-function(x,y){
message("Differentbehavior:default")}编写泛型函数x<-1:10y<-1:20class(y)<-“classA“
#给y贴上标签——classAinterface(x,y)#>Singleinterface#>Differentbehavior:classAclass(y)<-“classB“
#给y贴上标签——classBinterface(x,y)#>Singleinterface#>Differentbehavior:classB编写泛型函数class(y)<-“classC”interface(x,y)#>Singleinterface#>Differentbehavior:defaultclass(y)<-NULLinterface(x,y)#>Singleinterface#>Differentbehavior:default编写泛型函数methods("+")#>[1]+.Date+.POSIXt#>see'?methods'foraccessinghelpandsourcecodelibrary(ggplot2)methods(“+”)#同一条语句,不同的结果#[1]+.Date+.gg*+.POSIXt#see'?methods'foraccessinghelpandsourcecode重新审视+#重新审视Mini案例中的部分代码library(tidyverse)cjb%>%
select(sx,wlfk)%>%
ggplot(aes(x=wlfk,y=sx,fill=wlfk))+
geom_boxplot(width=0.5)"+.gg"<-function(e1,e2){e2name<-deparse(substitute(e2))if(is.theme(e1))add_theme(e1,e2,e2name)elseif(is.ggplot(e1))add_ggplot(e1,e2,e2name)}重新审视+"+.onlyFirst"<-function(a,b){
return(a[1]+b[1])}a<-1:5a+6:10#>[1]79111315class(a)<-“onlyFirst“#给a贴上一个类标签onlyFirsta+6:10#>[1]7定义自己的+递归:斐波那契数列(图片来自网络)从前有座山,山上有座庙,庙里有个老和尚,老和尚正在给小和尚讲故事。故事说的是:从前有座山,山上有座庙,庙里有个老和尚,老和尚正在给小和尚讲故事。故事说的是:从前有座山,……递归(图片来自网络)old_monk_story<-function(depth=1){
message(rep("",d
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南京科技职业学院单招综合素质考试题库含答案详解(培优b卷)
- 感光材料生产工安全培训竞赛考核试卷含答案
- 煤制气工保密意识评优考核试卷含答案
- 眼镜架制作工安全生产知识评优考核试卷含答案
- 事故应急保障方案
- 扬声器装调工岗前安全宣贯考核试卷含答案
- 绝缘套管制造工创新实践水平考核试卷含答案
- 鱼糜制作工安全生产意识测试考核试卷含答案
- 巷修工岗前安全培训效果考核试卷含答案
- 环氧丙烷装置操作工安全生产意识考核试卷含答案
- 仪表工业智能化规划方案
- 2022保得威尔JB-TG-PTW-6600E 火灾报警控制器(联动型)使用说明书
- 《新时代中小学教师职业行为十项准则》培训解读课件
- 2026届浙江省杭州市西湖区中考冲刺卷语文试题含解析
- 2025中国软件与技术服务股份有限公司招聘10人笔试历年参考题库附带答案详解
- 建筑企业企业所得税课件
- DB4401∕T 253-2024 海绵城市建设项目设计、施工和运行维护技术规程
- 职业健康单位管理体系构建
- 《2025年全球原油购销合同(中英文对照)》
- 重症患者液体管理
- 新人教版一年级数学下册全册同步练习一课一练
评论
0/150
提交评论