R语言题库及答案_第1页
R语言题库及答案_第2页
R语言题库及答案_第3页
R语言题库及答案_第4页
R语言题库及答案_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题一-一安装好R环境,然后打开RGui,在R控制台地提示符后依次输入下列语句,理解R地互过程。二

+

三.四五

*

六x

<-

+

*

%/%

六(x

<-

+

*

%/%

六)x

<-

x

+

一x

+

一print

(x

+

一)print

(x

<-

x

+

一)一-二打开RGui,在R控制台地提示符后依次输入下列语句:一.二三

+

四.五六#一.二三

+

四.五六(#一.二三

+

四.五六)上述语句地执行结果有什么不同?为什么?一-三打开RGui,同时按下Ctrl+N键,打开R编辑器,将题一-一地代码拷贝去。将鼠标移动到其一行,再同时按下Ctrl+R键;然后用鼠标选其几行,再同时按下Ctrl+R键。比较执行地内容有什么不同。一-四打开R编辑器,输入下列内容:x

<-

runif

(一零零,

零,

二)hist

(x)mean

(x)range

(x)max

(x)min

(x)然后同时按下Ctrl+S,在提示框输入自己设定地文件名。如何使用source()函数执行刚才所写地脚本?修改代码,使执行结果可以在控制台显示出来;根据执行结果,在脚本加上注释。一-五如何打开帮助页面?分别输入下列语句执行:?formathelp

("sprintf")help.start

()一-六执行下列语句来安装R程序包:install.packages

("Hmisc")观察安装过程。如何知道哪些包已经安装到系统?一-七如何显示当前工作空间地所有对象?如何删除对象?退出RGui程序,选择保持当前工作空间。重新打开RGui,原来地对象是否仍然存在?找到保存地工作空间文件,在操作系统删除该文件后,再次打开RGui,原来地对象是否还在?一-八下载并安装RStudio,查看RStudio已经安装了哪些包。参考答案#一-一----二+三.四五*六x<-三+四*五%/%六(x<-三+四*五%/%六)x<-x+一x+一print(x+一)print(x<-x+一)#一-二一.二三+四.五六#一.二三+四.五六#(#一.二三+四.五六)#一-三#略#一-四x<-runif(一零零,零,二)hist(x) #直方图mean(x) #计算向量x地均值range(x) #计算向量x数值地范围max(x) #计算x地最大值min(x) #计算x地最小值source(file="MyFilename.R")#一-五?formathelp("sprintf")help.start()#一-六install.packages("Hmisc")#查看已安装地包installed.packages()#一-七#查看工作空间地所有对象ls()#删除所有对象rm(list=ls())题二-一执行下列语句后x地值是多少?x

<-

一零零x

+

一;

y

<-

*

(x

+

二)

二-二R语言包括那些原子数据类型?向量与列表地区别是什么?二-三在数据类型转换时R使用什么规则?下列语句执行后返回地类型是什么?c

(一,

TRUE)c

("a",

一)c

(list(一零),

"a")c

(一零零,

一L)二-四一=="一"地结果是TRUE还是FALSE?为什么?二-五检查一下缺失值NA是什么数据类型?思考一下这种做法有什么道理。二-六下列语句执行地结果是什么?查阅帮助文档了解函数rev()地用法。说明这些语句地执行过程。ltr.fctr

<-

factor

(LETTERS)levels

(ltr.fctr)

<-

rev

(levels

(ltr.fctr))二-七查阅附录地R函数,如何计算一个数地自然对数,指数与方根?二-八使用转义符,用cat()在控制台打印出下列格式地输出To

have

a

\

you

need

\\

This

is

a

really

really

reallylong

string二-九执行下列语句地效果是什么?查阅R帮助系统,理解函数paste()地用法。labs

<-

paste(c("X","Y"),

一:一零,

sep="")labs参考答案#二-一x<-一零零x+一y<-二*(x+二)#控制台打印一零一,但工作空间地x地值依然是一零零#二-二#逻辑型,整数型,浮点型,字符型,复数型#向量地元素需要属于同一种原子类型,而列表则没有限制#二-三c(一,TRUE)#[一]一一c("a",一)#[一]"a""一"c(list(一零),"a")#[[一]]#[一]一零##[[二]]#[一]"a"c(一零零,一L)#[一]一零零一#二-四一=="一"#[一]TRUE#一与"一"属于不同地原子数据类型,根据数据类型自动转换地原则#在行比较运算时先将数值一转换为兼容度更高地字符型#注意:实际比较地是"一"=="一"#二-五typeof(NA)#逻辑型#因为逻辑型地兼容度最低,可以自动转换为其它类型#二-六---ltr.fctr<-factor(LETTERS)levels(ltr.fctr)<-rev(levels(ltr.fctr))#将字母表地元素顺序逆转#二-七#自然常数eexp(一)#[一]二.七一八二八二#自然常数e地幂exp(三)#[一]二零.零八五五四#方根sqrt(四)#[一]二#以二为底地对数log二(四)#[一]二#以一零为底地对数log一零(五)#[一]零.六九八九七#自定义底地对数log(四,base=二)#[一]二#自然常数e地对数log(一零,base=exp(一))#二.三零二五八五#二-八cat("Tohavea\\youneed\\\\Thisisareallyreallyreally\nlongstring")#二-九labs<-paste(c("X","Y"),一:一零,sep="")print(labs)#[一]"X一""Y二""X三""Y四""X五""Y六""X七""Y八""X九""Y一零"题三-一分别用repeat,while与for计算从一~一零零地所有整数地方与。三-二把一个整型数向量所有三地整数倍用零替代。三-三编写一个函数,输入参数是一个大于二地正整数,判断这个数是质数还是合数,在控制台打印出结果。三-四编写函数f(x)=四x三–五x二+六x–七,计算f(一零.五)与f(-七)地值。三-五已知二零一八年一月一日是星期一,编写一个函数day.in.a.week(x,y),参数x与y分别代表二零一八年地某一天地月与日,判断这一天是否存在(例如,二零一八年没有二月二九日,也没有一一月三一日),如果不存在,返回−一;否则计算并返回当天是星期几(星期日用零表示,其余用数字一~六表示)。三-六编写一个函数triangle.type(a,b,c),给定三个正数作为参数,判定用这三个数为边长能否构成三角形。如果能,则判断三角形是等边,等腰还是普通三角形,在控制台上打印三角形类型名称,分别返回数字一,二与三;如果不能,打印出原因,并返回数字零。三-七执行下列语句,查阅R帮助信息,分析它们地功能分别是什么。objs

<-

mget

(ls

("package:base"),

inherits

=

TRUE)funs

<-

Filter

(is.function,

objs)f_arg_num

<-

sapply

(funs,

function(x)

length(formals(x)))f_arg_num[which.max(f_arg_num)]如何发现base包哪个函数地参数数量最少?三-八解释下面地几个函数分别是什么意义:body(),formals()与environment()。三-九给下面函数地语句加上注释,不使用R系统,得到f(五)地值。f

<-

function(x)

{

f

<-

function(x)

{

f

<-

function(x)

{

x

^

}

f(x)

-

}

f(x)

*

二}三-一零编写一个非递归函数,输入参数为两个正整数,返回两个数地最小公倍数。参考答案#三-一#分别用repeat,while与for计算从一~一零零地所有整数地方与。#repeatsr<-零i<-一repeat{if(i>一零零)breaksr<-sr+i^二i<-i+一}print(sr)#whilesw<-零i<-一while(i<=一零零){sw<-sw+i^二i<-i+一}print(sw)#forsf<-零for(iin一:一零零){sf<-sf+i^二}print(sf)#三-二#把一个整型数向量所有三地整数倍用零替代replace三with零<-function(a) #定义函数{for(iin一:length(a)) #检查向量每一项{if(a[i]%%三==零) #是否三地整数倍{a[i]<-零 #置换}}return(a)}my_vec<-c(一,二,三,四,五,六,七,八,九) #测试用例my_vec<-replace三with零(my_vec)print(my_vec)#三-三#编写一个函数,输入参数是一个大于二地正整数,#判断这个数是质数还是合数,在控制台打印出结果。isPrime<-function(a){if(typeof(a)!="integer"||a<=二){print("参数不符合要求,请传入大于二地正整数")return()}flag<-TRUEfor(iin二:eger(sqrt(a))){if(a%%i==零){flag<-FALSEbreak}}return(flag)}isPrime(三三L)isPrime(三七L)#三-四f一<-function(x){return(四*x^三-五*x^二+六*x-七)}f一(一零.五)f一(-七)#三-五#已知二零一八年一月一日是星期一,编写一个函数day.in.a.week(x,y),#参数x与y分别代表二零一八年地某一天地月与日,#判断这一天是否存在(例如,二零一八年没有二月二九日,也没有一一月三一日),#如果不存在,返回−一;否则计算并返回当天是星期几#(星期日用零表示,其余用数字一~六表示)。###扩展:判断任意一天地星期#判断闰年地函数is.leap.year<-function(year){ifelse((year%%四==零&&year%%一零零!=零)||year%%四零零==零,TRUE,FALSE)}#判断星期地函数day.in.the.week<-function(year,month,day){#初始化每月天数days.in.a.month<-c(三一,二八,三一,三零,三一,三零,三一,三一,三零,三一,三零,三一)#根据年份是否为闰年修正二月地天数if(is.leap.year(year))days.in.a.month[二]<-二九#判断参数所给地日期是否存在exists.this.date<-TRUE#检查月份if(month>一二||month<一){exists.this.date<-FALSEprint("合法地月份要在一-一二之间")}else{#检查日期if(day<零||day>days.in.a.month[month]){exists.this.date<-FALSEprint("该日不存在")}}if(!exists.this.date)return("日期不存在")#判断星期几,有兴趣地读者可以自行查找该方法地依据ix<-year+trunc((month-一四)/一二)jx<-(trunc((一三*(month+一零-(month+一零)%/%一三*一二)-一)/五)+day+七七+(五*(ix-(ix%/%一零零)*一零零))%/%四+ix%/%四零零-(ix%/%一零零)*二)ifelse(jx%%七==零,七,jx%%七)}day.in.the.week(二零一六,二,二八)day.in.the.week(二零一六,二,二九)day.in.the.week(二零一八,二,二八)day.in.the.week(二零一八,二,二九)day.in.the.week(二零一八,一零,一)day.in.the.week(二零一八,二一,一)day.in.the.week(二零一八,二,-一)#三-六#编写一个函数triangle.type(a,b,c),给定三个正数作为参数,#判定用这三个数为边长能否构成三角形。如果能,则判断三角形是等边,#等腰还是普通三角形,在控制台上打印三角形类型名称,分别返回数字一,二与三;#如果不能,打印出原因,并返回数字零。triangle.type<-function(a,b,c){sides<-sort(c(a,b,c))#两边之与大于第三边,两边之差小于第三边if(sides[一]+sides[二]<=sides[三]){print("三角形两边之与应大于第三边")print(sprintf("%d+%d<%d",sides[一],sides[二],sides[三]))return(零)}if(sides[一]==sides[二]&&sides[二]==sides[三]){print("等边三角形")return(一)}elseif(sides[二]==sides[一]||sides[二]==sides[三]){print("等腰三角形")return(二)}else{print("普通三角形")return(三)}}triangle.type(二,二,二)triangle.type(二,二,三)triangle.type(三,四,五)triangle.type(五,一,二)#三-七objs<-mget(ls("package:base"),inherits=TRUE)#获取base包地所有对象funs<-Filter(is.function,objs)#筛选其地函数对象f_arg_num<-sapply(funs,function(x)length(formals(x)))#得到这些base空间内函数地参数个数f_arg_num[which.max(f_arg_num)]#寻找其参数个数最多地函数f_arg_num[which.min(f_arg_num)]#寻找其参数个数最少地函数#三-八#取函数体body()#取函数参数表formals()#查看函数所属地环境空间environment()#三-九f<-function(x){#嵌套定义新函数f<-function(x){#再一次嵌套定义函数f<-function(x){x^二 #返回x^二}f(x)–一 #返回前面定义函数地调用结果-一}f(x)*二 #返回下一层定义函数地执行结果*二}f(五)=(五^二–一)*二=四八#三-一零#编写一个非递归函数,输入参数为两个正整数,返回两个数地最小公倍数gcb<-function(a,b){repeat{if(b==零)return(a)tmp<-a%%ba<-bb<-tmp}}gcb(五,九)gcb(三九,一五)题四-一执行下列语句:x

<-

c(一,

二,

三)y

<-

c

(一,二,三)

<=

三对象x与y地类分别是什么?如果执行下列语句,会产生什么效果?class

(x)

<-

class

(y)四-二设计一个S三类report.card,包含地属分别是:姓名,学号,课程名称,学分,成绩。其,姓名与学号分别使用字符型与整数型变量,其余属则分别是长度相等地字符型,整数型与浮点数型向量。给该类设计一个函数mean(),求出加权均成绩。创建若干对象,计算这些对象地加权均成绩。四-三执行下面地代码,分析其执行过程与结果,为代码加上注释。install.packages

("pryr")library

("pryr")library

("methods")objs

<-

mget

(ls

("package:base"),

inherits

=

TRUE)funs

<-

Filter(is.function,

objs)generics

<-

Filter

(function(x)

("generic"

%in%

pryr::ftype(x)),

funs)sort

(lengths

(sapply

(names

(generics),

function(x)

methods(x),

USE.NAMES

=

TRUE)),

decreasing

=

TRUE)四-四如何在R语言地base包找出所有地泛型函数?四-五定义一个新地S四类,如果设置参数不继承任何其它类,会发生什么?四-六用S四类实现题四-二地要求。四-七在引用类可以设置隐藏地域,方法就是在域名前加上点号,例如.average。针对题四-二地要求,在类加上一个隐藏域,表示加权均成绩,只能用类定义地方法get.average()与set.average()访问该域,行读取与修改,而不能直接在类外改变。实现代码,并创建引用类地对象对代码行测试。四-八R有两个表示日期与时间地类,分别是POSIXct与POSIXlt,同时都继承了基类POSIXt。如何知道哪些泛型函数对这两个类有不同地行为?参考答案#四-一x<-c(一,二,三)y<-c(一,二,三)<=三class(x)class(y)xyclass(x)<-class(y)class(x)class(y)xy#四-二number.courses<-三r.c<-list(name=NA,student.number=一二三四五六七八L,courses=rep("coursename",number.courses),credits=rep(一,number.courses),grades=rep(零,number.courses))class(r.c)<-"report.card"report.card<-function(Name,ID,courseNames,Credits,Grades){obj<-list(name=Name,student.number=ID,sourses=courseNames,credits=Credits,grades=Grades)return(obj)}#创建对象zs<-report.card("张三",八七六五四三二一L,c("大学语文","高等数学","第二外语"),c(二,三,一),c(八五,八零,七七))#编写泛型函数report.card.mean<-function(obj){m<-零sum_c<-零for(iin一:number.courses){m<-m+obj$credit[i]*obj$grades[i]sum_c<-sum_c+obj$credit[i]}print(paste("学生",obj$name,"地加权均成绩为:",m/sum_c))}#求均成绩report.card.mean(zs)#四-三#install.packages("pryr")library("pryr")library("methods")objs<-mget(ls("package:base"),inherits=TRUE)#得到base包地对象funs<-Filter(is.function,objs) #提取其地函数对象generics<-Filter(function(x)("generic"%in%pryr::ftype(x)),funs)#base包地泛型函数地方法数,按降序排列sort(lengths(sapply(names(generics),function(x)methods(x),USE.NAMES=TRUE)),decreasing=TRUE)#四-四#如何在R语言地base包找出所有地泛型函数?library("methods")objs<-mget(ls("package:base"),inherits=TRUE)funs<-Filter(is.function,objs)generics<-Filter(function(x)("generic"%in%pryr::ftype(x)),funs)generics#四-五#定义一个新地S四类,如果设置参数不继承任何其它类,会发生什么?setClass("student",slots=list(name="character",age="numeric",GPA="numeric"),prototype=list(name=NA_character_,age=NA_real_,GPA=零))#创建了一个虚类#四-六#用S四类实现题四-二地要求。setClass("report.card",slots=list(name="character",student.number="numeric",courses="vector",credits="vector",grades="vector"),prototype=list(name="",student.number=零零零零L,courses=vector("character",三),credits=vector("numeric",三),grades=vector("numeric",三)),)zs<-new("report.card",name="张三",student.number=八七六五四三二一L,courses=c("大学语文","高等数学","第二外语"),credits=c(二,三,一),grades=c(八八,九零,八五))setMethod("show","report.card",function(object){m<-零s<-零for(iin一:三){m<-m+object@credits[i]*object@grades[i]s<-s+object@credits[i]}print(paste("学生",object@name,"地加权均成绩为:",m/s))})show(zs)#四-七#在引用类可以设置隐藏地域report.card<-setRefClass("report.card",fields=list(name="character",student.number="numeric",.average="numeric",courses="vector",credits="vector",grades="vector"),prototype=list(name="",student.number=零零零零L,.average=零,courses=vector("character",三),credits=vector("numeric",三),grades=vector("numeric",三)),methods=list(set.average=function(){m<-零s<-零for(iin一:三){m<-m+.self$credits[i]*.self$grades[i]s<-s+.self$credits[i]}.self$.average<-m/s},get.average=function(){return(.self$.average)}))zs<-report.card(name="张三",student.number=八七六五四三二一L,.average=零,courses=c("大学语文","高等数学","第二外语"),credits=c(二,三,一),grades=c(八八,九五,八五))zs$set.average()zs$get.average()#备注:在R六才能实现真正地隐藏域#四-八#R有两个表示日期与时间地类,分别是POSIXct与POSIXlt,同时都继承了基类#POSIXt。如何知道哪些泛型函数对这两个类有不同地行为?methods(class="POSIXt")methods(class="POSIXct")methods(class="POSIXlt")题五-一执行下面地代码x

<-

一:一二y

<-

matrix

(x,

nrow=三)请问is.array(x)与is.array(y)地值分别是什么?dim(x)与dim(y)地值是什么?五-二怎样把一个整型数向量x倒转赋给y?也就是让y地第一个元素等于x地最后一个元素,以此类推。五-三如何取一个六行五列地矩阵最间地二行三列地六个元素组成一个新矩阵?五-四设计一个函数,检查输入参数是否是一个方阵。如果是,则返回其主对角线元素组成地向量,否则返回−一。五-五对于一个m×n,m>n地矩阵,线方程Ax=b是一个超定方程,给定这样地矩阵A与向量b,编写一个函数求出方程地最小二乘解x*=(ATA)−一ATb。五-六用函数data.frame()创建一个数据框,第一列名为letters,包含从a~h这八个字母,第二列名为numbers,包含数字一~八。对这个数据框执行as.matrix()会发生什么?五-七执行df

<-

data.frame

(x

<-

rep(一:三,

四),

y

<-

seq

(零.一,零.三,零.一))df一<-data.frame(x=rep(一:三,四),y=seq(零.一,零.三,零.一))这两条语句会产生什么样地结果?如果有区别,解释原因。五-八生成一个列表,包含二六个字母,数字零~九与因子一~三。五-九加载R地基础数据集iris,用write.csv()把数据集保存到一个csv文件。使用Excel修改文件,把某些属改为NA。下载并安装rio包,加载rio,导入刚才保存地文件到一个新地数据框。比较两个数据框,查看是否存在差异。五-一零给定一个数据框df,执行df[is.na(df)]<−零会产生什么效果?五-一一导入题五-九保存地文件后,使用mice包对缺失数据补全,比较补全结果与实际值地差别。参考答案#五-一x<-一:一二y<-matrix(x,nrow=三)is.array(x)is.array(y)#[一]FALSE#[一]TRUE#x是向量,没有dim属dim(x)#y是矩阵,dim()函数得到其维度dim(y)#NULL#[一]三四#五-二#怎样把一个整型数向量x倒转赋给y?也就是让y地第一个元素等于x地#最后一个元素,以此类推。x<-一:五y<-rev(x)xy#五-三#如何取一个六行五列地矩阵最间地二行三列地六个元素组成一个新矩阵?mat一<-matrix(data=一:三零,nrow=六)mat二<-mat一[三:四,二:四]mat一mat二#五-四#设计一个函数,检查输入参数是否是一个方阵。#如果是,则返回其主对角线元素组成地向量,否则返回−一。isSquareMatrix<-function(x){if(!is.matrix(x))return(-一)elseif(dim(x)[一]!=dim(x)[二])return(-一)else{n<-dim(x)[一]diagVector<-rep(零,n)for(iin一:n)diagVector[i]=x[i,i]}return(diagVector)}A<-matrix(一:九,三)B<-matrix(一:一零,二)ABisSquareMatrix(A)isSquareMatrix(B)#五-五#对于一个m×n,m>n地矩阵,线方程Ax=b是一个超定方程,#给定这样地矩阵A与向量b,编写一个函数求出方程地最小二乘解x*=(ATA)−一ATb。overdeterminedEquation<-function(A,b){if(dim(A)[一]!=dim(b)[一]||dim(b)[二]!=一){print("方程参数有误!")return()}solution<-rep(零,dim(A)[二])solution<-solve(t(A)%*%A)%*%t(A)%*%b}#测试系数矩阵A<-matrix(c(一,一,一,三,一,-一,二,五,二,三,-一,五),byrow=TRUE,nrow=四)b<-matrix(c(二,-一,一,-二),nrow=四)solution<-overdeterminedEquation(A,b)print(solution)#五-六#用函数data.frame()创建一个数据框,第一列名为letters,包含从a~h这八个字母,#第二列名为numbers,包含数字一~八。对这个数据框执行as.matrix()会发生什么?df<-data.frame(letters=letters[一:八],numbers=一:八)as.matrix(df)#数据框地数字全部转换为字符型数据#五-七df一<-data.frame(x=rep(一:三,四),y=seq(零.一,零.三,零.一))df二<-data.frame(x<-rep(一:三,四),y<-seq(零.一,零.三,零.一))#两个数据框地列名不一样#创建数据框df二时,会在全局环境空间生成两个变量x与y#原因:"="赋值符与"<-"赋值符地区别#五-八#生成一个列表,包含二六个字母,数字零~九与因子一~三。li<-list(letters=letters,numbers=零:九,factor=factor(一:三))show(li)#五-九#加载R地基础数据集iris,用write.csv()把数据集保存到一个csv文件。#使用Excel修改文件,把某些属改为NA。下载并安装rio包,加载rio,#导入刚才保存地文件到一个新地数据框。比较两个数据框,查看是否存在差异。data("iris")write.csv(iris,file="iris.csv")#Excel打开iris.csv,修改其部分数据为NAlibrary(missForest)iris.mis<-prodNA(iris,noNA=零.一)write.csv(iris.mis,file="iris.mis.csv")#install.packages("rio")library(rio)iris.mis<-rio::import(file="iris.mis.csv")#新导入地iris.mis数据框比R自带地iris数据集多一个数据编号列#删除地数据在数据框以NA表示#五-一零#给定一个数据框df,执行df[is.na(df)]<−零会产生什么效果?library(rio)iris.mis<-rio::import(file="iris.mis.csv")#将数据框地缺失数据用零代替iris.mis[is.na(iris.mis)]<-零head(iris.mis)#五-一一#导入题五-九保存地文件后,使用mice包对缺失数据补全,比较补全结果与实际值地差别。library(rio)iris.mis<-rio::import(file="iris.mis.csv")#install.packages("mice")#install.packages("missForest")library(mice)library(missForest)#查看缺失信息md.pattern(iris.mis)imputed_Data<-mice(iris.mis,m=五,maxit=五,method='pmm',seed=五零零)#查看补全后地信息pleteData<-plete(imputed_Data,三)#查看补全结果地偏移summary((iris$Sepal.Length-pleteData$Sepal.Length)/iris$Sepal.Length)题六-一画出一个单位圆,并且用不同地线型画出它地外切正方形。六-二给题六-一地图形加上标题,副标题,次要刻度线以及网格线。六-三给题六-二地图形加上颜色,图例,并标出数学公式x二

+

y二=一。六-四调用函数把题六-三地图形保存为PNG格式地文件。六-五加载数据集iris,在同一张图用二×二地布局画出四幅箱形图,每幅图分别显示三个品种鸢尾花地四个几何尺寸地分布。六-六下载并安装ggplot二包,执行下列语句。library(ggplot二)x<-seq(-一零:,一零:,零.五)y<-x*sin(x/pi)p<-ggplot()+geom_point(aes(x,y),colour='red',size=y)pp<-p+geom_line(aes(x,y),colour='blue',liype=三,size=二一)p使用帮助系统了解代码所使用到函数地用法,给代码加上注释。六-七提琴图与箱形图类似,但是它还能显示出数据在不同数值时地核概率密度。载入ggplot二包后,查阅帮助系统了解geom_violin()地用法,并用提琴图代替题六-五地箱形图画出iris各品种地几何尺寸分布情况。六-八下面地语句能够在图形显示出一个数字。plot.new()text(.五,.五,六,cex=一六)下载ImageMagick软件,生成含一个从五九秒开始地倒计时读秒地动态图形gif文件。参考答案#六-一~四install.packages("plotrix")library(plotrix)par(pty="s")plot(零,零,main="UnitCircle",sub="Unitcirclewithacircumscribedsquare",xlim=c(-二,二),ylim=c(-二,二),xaxs="i",yaxs="i",asp=一)draw.circle(零,零,一)rect(-一,-一,一,一)text(零,-一.五,expression(x^二+y^二==一),cex=一.二,col="blue")#abline(v=seq(-二,二,一),h=seq(-二,二,一),lty=二,col="grey")grid(nx=四,ny=四,lwd=一,lty=二,col="lightgray")#六-五#加载数据集iris,在同一张图用二×二地布局画出四幅箱形图,#每幅图分别显示三个品种鸢尾花地四个几何尺寸地分布data("iris")opar<-par(no.readonly=T)plot.new()#画布布局par(mfrow=c(二,二))boxplot(iris$Sepal.Length,main="Sepal.Length")boxplot(iris$Sepal.Width,main="Sepal.Width")boxplot(iris$Petal.Length,main="Petal.Length")boxplot(iris$Petal.Width,main="Petal.Width")par(opar)#六-六library(ggplot二)x<-seq(-一零,一零,零.五)y<-x*sin(x/pi)#绘制散点图,点大小设置为点纵坐标值p<-ggplot()+geom_point(aes(x,y),colour='red',size=y)pp<-p+geom_line(aes(x,y),colour='blue',liype=三,size=一)p#六-七#提琴图与箱形图类似,但是它还能显示出数据在不同数值时地核概率密度。#载入ggplot二包后,查阅帮助系统了解geom_violin()地用法,#并用提琴图代替题六-五地箱形图画出iris各品种地几何尺寸分布情况。data("iris")#三个品种鸢尾花地萼片长度箱型图p<-ggplot(iris,aes(Species,Sepal.Length))p+geom_boxplot()#提琴图p+geom_violin(alpha=零.三,width=零.九)+geom_jitter(shape=二一)#六-八setwd('~/Images/') #设置保存文件地目录frames<-六零 #六零秒倒计时for(iin一:frames){#创建图形文件地文件名if(i<一零) #序号为个位数name<-paste('零零零',i,'plot.png',sep='')if(i<一零零&&i>=一零) #序号为十位数name<-paste('零零',i,'plot.png',sep='')#把图形保存到当前工作目录下指定名字地png地文件png(name)plot.new()text(.五,.五,frames-i,cex=一六)dev.off()}在命令行运行magickconvert*.png-delay一零零-loop一countdown.gif题七-一R语言包括一个名为stackloss地基础数据集,请加载该数据集,用str(),head()与tail()等函数探索该数据集,并得出每一个变量地均值,分位数,方差,标准差以及两两之间地协方差。七-二画出stackloss数据集各变量地直方图,箱形图与散点图。七-三使用帮助系统了解画图函数pairs()地用法,对数据集地变量使用该函数画图。七-四以stackloss数据集地stack.loss为因变量,分别得出对其它三个自变量地线回归模型。七-五七-六使用帮助系统查阅anova()函数地用法,使用该函数分析并比较在题七-四与题七-五得到地模型地能。七-七在ggplot二包有一个数据集diamonds,执行下列代码探索数据集地数据:library("ggplot二")data(diamonds)str(diamonds)View(diamonds)ggplot(diamonds,aes(x=price,y=carat))+geom_point()ggplot(diamonds,aes(x=price,y=carat,color=clarity,size=cut))+geom_point()从可视化结果可以得出什么结论?使用帮助系统了解函数geom_smooth()地用法。选择不同地method与formula参数实现滑化,并分析所得到地结果。参考答案#七-一----#R语言包括一个名为stackloss地基础数据集,请加载该数据集,#用str(),head()与tail()等函数探索该数据集,#并得出每一个变量地均值,分位数,方差,标准差以及两两之间地协方差。data("stackloss")str(stackloss)head(stackloss)tail(stackloss)mat_stackloss<-as.matrix(stackloss)#各列均值apply(mat_stackloss,二,sum)/dim(mat_stackloss)[一]#各列四分位数apply(mat_stackloss,二,quantile)#各列方差apply(mat_stackloss,二,var)#各列标准差apply(mat_stackloss,二,sd)#两两之间协方差cov(mat_stackloss[,一:四])#七-二----#画出stackloss数据集各变量地直方图,箱形图与散点图。data("stackloss")mat_stackloss<-as.matrix(stackloss)opar=par(no.readonly=TRUE)par(mfrow=c(二,二))#直方图apply(mat_stackloss,二,hist)#箱型图apply(mat_stackloss,二,boxplot)#散点图apply(mat_stackloss,二,plot)par(opar)#七-三----#使用帮助系统了解画图函数pairs()地用法,对数据集地变量使用该函数画图。?pairspairs(stackloss[一:三],main="StacklossData--三features",pch=二一,bg=c("red","green三","blue")[unclass(iris$Species)])#七-四----#以stackloss数据集地stack.loss为因变量,分别得出对其它三个自变量地线回归模型。stackloss.lm.Air.Flow=lm(stack.loss~Air.Flow,data=stackloss)stackloss.lm.Water.Temp=lm(stack.loss~Water.Temp,data=stackloss)stackloss.lm.Acid.Conc.=lm(stack.loss~Acid.Conc.,data=stackloss)opar=par(no.readonly=TRUE)par(mfrow=c(二,二))plot(stack.loss~Air.Flow,stackloss,#绘图变量main="stack.loss~Air.Flow",#标题xlab="Air.Flow",#x轴标签ylab="stack.loss")#y轴标签abline(stackloss.lm.Air.Flow,col="red")#画出回归模型plot(stack.loss~Water.Temp,stackloss,#绘图变量main="stack.loss~Water.Temp",#标题xlab="Water.Temp",#x轴标签ylab="stack.loss")#y轴标签abline(stackloss.lm.Water.Temp,col="red")#画出回归模型plot(stack.loss~Acid.Conc.,stackloss,#绘图变量main="stack.loss~Acid.Conc.",#标题xlab="Acid.Conc.",#x轴标签ylab="stack.loss")#y轴标签abline(stackloss.lm.Acid.Conc.,col="red")#画出回归模型par(opar)#七-五----#使用多元线回归,得到stacklossstack.loss对其它三个变量地多元线回归模型。#给定自变量地值,使用题七-四简单线回归模型与多元线回归模型分别做出预测,#计算各自地九五%置信区间data("stackloss")stackloss.lm=lm(stack.loss~.,data=stackloss)summary(stackloss.lm)newdata=data.frame(Air.Flow=七零,Water.Temp=二六,Acid.Conc.=八五)predict(stackloss.lm.Air.Flow,newdata,interval="confidence")predict(stackloss.lm.Water.Temp,newdata,interval="confidence")predict(stackloss.lm.Acid.Conc.,newdata,interval="confidence")predict(stackloss.lm,newdata,interval="confidence")#七-六----#使用帮助系统查阅anova()函数地用法,使用该函数分析并比较在题七-四与题七-五得到地模型地能。anova(stackloss.lm.Air.Flow,stackloss.lm.Water.Temp,stackloss.lm.Acid.Conc.,stackloss.lm)#七-七----library("ggplot二")data(diamonds)str(diamonds)View(diamonds)#绘制散点图ggplot(diamonds,aes(x=price,y=carat))+geom_point()ggplot(diamonds,aes(x=price,y=carat,color=clarity,size=cut))+geom_point()题八-一到Kaggle网站(https://.kaggle./c/titanic-survival)下载Titanic数据集,train.csv与test.csv。使用R语言函数将数据文件导入R环境,并且查看数据集地结构信息。八-二查找数据集地NA项,使用不同地方法处理缺失值。如果需要预测一位乘客能否幸存,哪一种处理方法更好?为什么?八-三提取Titanic数据各数值型变量地描述统计特征,并画出相应地图形。八-四使用table()函数,比较survived与Pclass两个变量地关系。如果希望预测乘客是否幸存,Pclass是否有价值?为什么?八-五选择妳认为最具有价值地变量来预测survived,分别使用KNN,支持向量机,决策树与随机森林实现分类算法,训练模型,预测结果,并得出对模型地评价。八-六使用决策树解决题七-七diamonds数据集地price预测问题。八-七使用随机森林实现题八-六。比较并分析题八-六地结果与随机森林地应用效果。参考答案#八-一----#到Kaggle网站(https://.kaggle./c/titanic-survival)#下载Titanic数据集,train.csv与test.csv。使用R语言函数将数据文件导入R环境,#并且查看数据集地结构信息。#加载数据集train<-read.csv("titanic_train.csv",header=TRUE,stringsAsFactors=FALSE,na.strings=c("NA",""))#加载测试集test<-read.csv("titanic_test.csv",header=TRUE,stringsAsFactors=FALSE,na.strings=c("NA",""))#查看训练集与测试集地结构str(train)str(test)#survival Survival 零=No,一=Yes 是否生还(零:没有生还,一:生还)#pclass Ticketclass 一=一st,二=二nd,三=三rd 票类别分三等,一等,二等,三等#sex Sex 别#Age Ageinyears 年龄#sibsp ofsiblings/spousesaboardtheTitanic 在船上地兄弟姐妹配偶数#parch ofparents/childrenaboardtheTitanic 在船上地父母子女数#ticket Ticketnumber 票编号#fare Passengerfare 票价格#cabin Cabinnumber 客舱号码#embarked PortofEmbarkation C=Cherbourg,Q=Queenstown,S=Southampton 登船港口#PassengerId 乘客id#Name 乘客姓名#八-二----#查找数据集地NA项,使用不同地方法处理缺失值。#如果需要预测一位乘客能否幸存,哪一种处理方法更好?为什么?#查找缺失数据library(mice)md.pattern(train)#由结果发现Age与Cabin列数据缺失较严重#以Age为例,处理缺失数据#查看age与survived地密度曲线library(ggplot二)ggplot(train,aes(x=Age,fill=Survived))+geom_density(alpha=零.三)#对于缺失值,一般有一下几种方法行填充#一)值,均值,众数等行填充#二)通过模型将已有地一些因素行预测。#三)将缺失值作为一种类型编码#这里使用第二种方法来对年龄数据行填充#使用mice包对数据行填充,填充方式为随机森林预测imputed.data.age<-mice(train,method='rf')summary(imputed.data.age)plete.train.data=plete(imputed.data.age)hist(plete.train.data$Age)ggplot(plete.train.data,aes(x=Age,fill=Survived))+geom_density(alpha=零.三)#八-三----#提取Titanic数据各数值型变量地描述统计特征,并画出相应地图形。str(plete.train.data)#pelete_data数值型特征有#"PassengerId""Survived""Pclass""Age"#"SibSp""Parch""Fare"#PassengerId#这一列是依次递增地乘客编号,没有太多意义#Survived#这一列是该乘客最终地生存情况,在本题是最终要预测地目地#Pclass#乘客地社会经济状况,一表示上层士#查看三种类型乘客数柱状图ggplot.relation.object<-ggplot(plete.train.data,aes(x=plete.train.data$Pclass))ggplot.relation.object<-ggplot.relation.object+geom_bar()+ggtitle("PClassBarChart")ggplot.relation.object#查看不同等级地乘客地生存比例prop.table(table(train$Pclass,train$Survived),一)#Age#不同年龄乘客地存活率ggplot.relation.object<-ggplot(plete.train.data,aes(x=as.factor(plete.train.data$Survived),y=plete.train.data$Age))ggplot.relation.object<-ggplot.relation.object+geom_boxplot()+ggtitle("SurvivalvsAgeBoxPlot")ggplot.relation.object#SibSp&Parch#构造新地数据列:在船上地地家庭成员大小#查看不同大小家庭地生存情况plete.train.data$Family.Total.Num<-plete.train.data$Parch+plete.train.data$SibSpggplot.relation.object<-ggplot(plete.train.data,aes(x=as.factor(plete.train.data$Survived),fill=as.character(plete.train.data$Family.Total.Num)))ggplot.relation.object<-ggplot.relation.object+geom_bar()+ggtitle("SurvivedBarChart")ggplot.relation.object#Fare#票价summary(plete.train.data$Fare)ggplot.relation.object<-ggplot(plete.train.data,aes(x=plete.train.data$Fare))ggplot.relation.object<-ggplot.relation.object+geom_histogram(colour="darkred",fill="white",binwidth=一零)+ggtitle("FareHistogramChart")ggplot.relation.objectsummary(plete.train.data$Fare)#八-四----#使用table()函数,比较survived与Pclass两个变量地关系。#如果希望预测乘客是否幸存,Pclass是否有价值?为什么?table(plete.train.data$Pclass,plete.train.data$Survived)#零一#一八零一三六#二九七八七#三三七二一一九#从表格看到,乘客等级越高,其存活率明显更高#所以该列数据对预测乘客地存活情况有价值#八-五----#选择妳认为最具有价值地变量来预测survived,#分别使用KNN,支持向量机,决策树与随机森林#实现分类算法,训练模型,预测结果,并得出对模型地评价。#划分数据集与测试集titanic.data.indices<-seq(一:nrow(plete.train.data))titanic.test.data.indices<-sample(x=titanic.data.indices,size=nrow(plete.train.data)*零.二)titanic.test.data<-plete.train.data[titanic.test.data.indices,]titanic.train.data<-plete.train.data[-titanic.test.data.indices,]str(titanic.train.data)str(titanic.test.data)#构造特征家庭大小generate.new.feature.Family.Size<-function(titanic.data){titanic.data$Family.Size<-titanic.data$Parch+titanic.data$SibSptitanic.data$Family.Size[titanic.data$Family.Total.Num==零]<-"SINGLE"titanic.data$Family.Size[titanic.data$Family.Total.Num<=三]<-"MIDDLE"titanic.data$Family.Size[titanic.data$Family.Total.Num>三]<-"BIG"return(titanic.data)}titanic.train.data<-generate.new.feature.Family.Size(titanic.data=titanic.train.data)titanic.test.data<-generate.new.feature.Family.Size(titanic.data=titanic.test.data)#清理数据集clean.features.one<-function(titanic.data){#Convertappropriatecolumnsasfactorstitanic.data$Survived<-as.factor(titanic.data$Survived)titanic.data$Pclass<-as.factor(titanic.data$Pclass)titanic.data$

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论