【R语言编程基础】【课后习题答案】【全】


在这里插入图片描述

第1章 R语言概述

1.选择题

(1)多行注释的快捷键是(C)。
A.Ctrl+Shin+N
B.Ctrl+N
C.Ctrl+Shin+C
D.Ctrl+C

(2)以下函数不能直接查看plot函数的帮助文档的是(B)。
A. ?plot
B.??plot
C.help(plot)
D.help(plot)

(3)以下R包的加载方式正确的是(A)。
A.install.package 函数
B.library 函数
C…libPaths 函数
D.install 函数

(4)以下R包中不能调用分类算法的是(D)。
A.nnet包
B.e1071包
C.tree包
D.arules包

2.操作题

(1)依据1.1节的R下载及安装方法,在计算机上安装R,通过熟悉基本操作的命令及操作界面,掌握软件的使用方法。
(2)依据1.2节的RStudio下载及安装方法,在计算机上安装RStudio,并尝试通过帮助文档学习使用plot函数绘制简单的散点图。
(3)依据1.3节的R包下载及安装方法,在计算机上安装DT包(用于创建交互式表格),并在命令运行窗口运行命令 datatable(iris),将得到交互式表格,如图1-29所示。

图1-29 iris数据集的交互式表格
(4)依据1.4节内容,加载boot包中的acme数据集,并查看acme数据集的前6项。同时,通过help函数查看acme数据集的数据含义并进行说明。

第2章 数据对象与数据读写

1.选择题

(1)下列可以判别字符型数据的函数是(A)。
A. is.numeric
B. is.logical
C. is.character
D.is.na
(2)下列可以判别数值型数据的函数是(D)。
A. is.complex
B. is.na
C.is.integer
D. is.numeric

(3)可将对象转换为逻辑型数据的函数是(D)。
A. as.character
B. is.numeric
C.as.logica
D. as.complex

(4)下列选项不是逻辑型数据的是(C)。
A.T
B.F
C.NA
D.10

(5)下列可以求矩阵的特征值和特征向量的函数是(B)。
A. diag
B. eigen
C.solve
D. det

(6)下列选项中可以使得列表转换为向量的是(D)。
A. as.matrix
B. as.data.frame
C. as.list
D. unlist

(7)下列用来转换数据框的函数是(B)。
A. as.list
B. as.matrix
C. as.data.frame
D. as.vector

(8)下列用键盘导人数据的函数是(B)。
A.read.table
B. read.csv
C.edit
D.readHTMLTable

(9)RODBC包中向数据库提交一个查询,并返回结果的函数是(B)。
A.odbcConnect
B.sqlFetch
C. sqlQuery
D. sqlDrop

(10)抓取网页上的表格,可使用XML包的是(D)函数。
A.read.csv
B. read.table
C.read.xlsx
D. read HTMLTable

2.操作题

(1)创建一个对象,并进行数据类型的转换、判别等操作,步骤如下:
①创建一个对象x,内含元素为序列:1,3,5,6,8
②判断对象x是否是数值型数据
③将对象转换为逻辑数据,记为x1
④判断x1是否为逻辑型数据

#操作题(1)
x<-c(1,3,5,6,8)   #创建一个对象x
is.numeric(x)    #判断x是否是数值型数据
x1<-as.logical(x)  #将对象转化为逻辑型数据
is.logical(x1)  #判断是否为逻辑型数据

(2)创建多种数据结构,并进行数据结构的转换、索引、扩展等编辑操作,步骤如下:
①设置工作空间目录
②创建一个向量x,内含元素为序列:11,23,25,46,38,30,59,47,21,67
③查询向量x中序号为23和46的元素,查询向量x中大于等于50的元素的位置。
④创建一个重复因子序列Species:水平数为3,各水平重复两次,序列长度为5;3个水平为setosa、versicolor、virginica
⑤创建一个5行2列的矩阵,元素为向量x,按列填充
⑥将矩阵写入数据框data_iris,更改列名为Sepal.Length、Sepal.Width
⑦将数据框data_iris保存为TXT文件,保存到工作空间的test目录下
⑧将数据框data_iris转换为向量y
⑨判断是否转换成功

#操作题(2)
setwd("./第2章 数据对象与数据读写/02-习题程序/code")                    #设置工作科技目录
x<-c(11,23,25,46,38,30,59,47,21,67)     #创建向量x
x[c(2,4)]                           #查询向量中第2,第4位置的元素
which(x>35& x<=50)                #查询x中大于35小于等于50元素的位置
#创建一个重复因子序列
Species<-rep(c("setosa","versicolor","virginica"),each=2,length.out=5)   a<-matrix(x,5,2)                    #创建一个元素为x的矩阵
#将矩阵写入数据框data_iris并更改列名
data_iris<-data.frame(Sepal.Length=a[,1],Sepal.Width=a[,2])
write.table(data_iris," ./data_iris.txt")  #将数据框保存为txt文件
#将数据框转化为向量y
b<-as.matrix(data_iris)
y<-as.vector(b)
is.vector(y)   #判断是否为向量

(3)读取TXT文件,进行编辑操作,再写入另外一个CSV文件中,步骤如下:
①读取保存再test目录下的TXT文件data_iris
②将R的示例数据集iris中的第6~10行写入数据框data_iris1中
③将数据框data_iris与data_iris1合并为数据框data_iris2,并保存在CSV文件所在的目录下

#操作题(3)
read.table("./第2章 数据对象与数据读写/02-习题程序/code/data_iris.txt")  #读取txt文件data_iris
data_iris1<-data.frame(iris[6:10,])     #将数据集iris中第6到10行写入数据框
#将数据框data_iris和data_iris1合并为data_iris2
data_iris2<-cbind(data_iris,data_iris1)   
#将数据框data_iris2保存为csv文件
write.csv(data_iris2,"./第2章 数据对象与数据读写/02-习题程序/code/data_iris2.csv")

第3章 数据集基本处理

1.选择题

(1)下列不属于用于修改变量名的函数是(C)。
A. rename 函数
B.names 函数
C.name函数
D.colnames 函数

(2)下列用于修改矩阵变量名的函数是(B)。
A.rename函数
B.colnames 函数
C.names 函数
D.name函数

(3)下列属于as.Date函数功能的选项是(A)。
A.将字符串形式的日期值转换为日期变量
B.返回系统当前的日期
C.将字符申转换为包含时间及时区的日期变量
D.将日期变量转换成指定格式的字符型变量

(4)下列关于合并数据集不正确的选项是(C)。
A.数据框的合并可以通过rbind函数和cbind函数
B.rbind函数的自变量的宽度(列数)应该与原数据框的宽度相等
C.rbind函数的自变量的高度(行数)应该与原数据框的宽度相等
D.cbind函数的自变量的高度(行数)应该与原数据框的高度相等

(5)下列不属于sample函数功能的是(B)。
A.放回随机抽样
B.函数排序
C.可对数据进行随机分组
D.不放回随机抽样

(6)下列关于subset函数表达的错误选项是(D)。
A.可用来选取变量与观测变量
B.其中x是所要选择的数据框
C.subset是所要查看信息的方法
D.select查看的某个区域可以大于数据框x

(7)使用merge函数合并数据时,下列为默认值的是(B)。
A.相同列名的列
B.相同行名的行
C.第1列数据
D.第1行数据

(8)使用mell函数操作n维数组时,返回的结果有(A)列。
D.n+2
A.n
B.n+1
C.n-1

(9)元字符·的含义为(B)。
A.前面的字符或表达式重复零次或更多次
B.前面的字符或表达式重复一次或更多次
C.前面的字符或表达式重复零次或一次
D.前面的字符或表达式重复零次

(10)下列关于paste函数表达错误的选项是(D)。
A.参数sep表示分隔符,默认为空格
B.参数 collapse不指定值时,返回值是自变量之间通过sep指定的分隔符连接后得到的一个字符型向量
C.参数 collapse指定了特定的值,则自变量连接后的字符型向量会再被连接成一个字符申,之间通过collapse的值分隔
D.设置collapse参数,返回值为字符向量

2.操作题

(1)创建一个矩阵,并使用交互式编辑器修改变量名;创建一个数据框,并在数据框中添加3个新变量,分别为原数据的差、乘积和余数。

#操作题(1)
a<-matrix(1:12,3,4)
fix(a)
a<-c(1,2,3,4)
b<-c(11,22,33,44)
x1<-data.frame(a,b,d=a-b,e=a*b,f=a%%b)
x1

(2)构建一个含有缺失值的数据框,检测该数据框是否含有缺失值并删除包含缺失值的行;创建一个字符串的日期值,分别使用as.Date 函数、as.POSIXIt 函数、strptime 函数转换为日期变量;使用sort函数对score的Chinese列进行从大到小排列,并且把缺失值放在最后。

#操作题(2)
x2<-data.frame(id=c(1,2,3,4),name=c("张三","李四","王五","赵六"),
               math=c(70,89,NA,80),English=c(86,78,65,92))
anyNA(x2)
na.omit(x2)
dates <- c("10/27/2017", "02/25/2017", "01/14/2017", "07/18/2017", "04/01/2017")
 # 按照月日年的格式进行转换
(date <- as.Date(dates, "%m/%d/%Y"))
datas1<- c("2017-09-08 11:17:52", "2017-08-07 20:33:02")
# 对字符串形式的日期时间值按照格式进行转换
as.POSIXlt(datas1, tz = "", "%Y-%m-%d %H:%M:%S")
(datas2 <- strptime(datas1, "%Y-%m-%d %H:%M:%S")) 
score <- data.frame(student = c("A", "B", "C", "D"), 
                    gender = c("M", "M", "F", "F"), 
                    math = c(90, 70, 80, 60), 
                    Eng = c(88, 78, 69, 98), 
                    p1 = c(66, 59, NA, 88))
names(score)[5] = "Chinese"
score
sort(score$Chinese,decreasing=TRUE, na.last=TRUE) 

(3)构建一个数据框,并使用两种方法来选取变量;使用sample函数实现放回随机抽样与不放回随机抽样。

#操作题(3)
data<- data.frame(a = c(5.1, 4.9, 4.7), b = c(3.5, 3.0, 3.2), c = c( 1.4, 1.3, 1.5),d = rep(0.2, 3))
newdata <- data[, c(3:4)]
newdata1 <- subset(data, a == "4.9", select = c(b, d))

a<-c(11,22,33,44,55,66,77,88,99)
sample(a, 5, replace = TRUE) #放回简单随机抽样
sample(a, 5, replace = FALSE)  # 不放回简单随机抽样

(4)使用SQL语句对文中数据框stuscore进行计算。
①计算每个人的总成绩并排名(要求显示字段:学号、总成绩)。
②计算每个人单科的最高成绩(要求显示字段:学号、课程、最高成绩)。
③列出各门课程成绩最好的学生(要求显示字段:学号、科目、成绩)。
④列出各门课程成绩最差的学生(要求显示字段:学号、科目、成绩)。

#操作题(4)
name <- c(rep("张三", 1, 3), rep("李四", 3))
subject <- c("数学", "语文", "英语", "数学", "语文", "英语")
score <- c(89, 80, 70, 90, 70, 80)
stuid <- c(1, 1, 1, 2, 2, 2)
stuscore <- data.frame(name, subject, score, stuid)
library(sqldf)
# 计算每个人的总成绩并排名(要求显示字段:学号,总成绩)
sqldf("select stuid, sum(score) as allscore from stuscore group by stuid order 
      by allscore")
# 计算每个人单科的最高成绩(要求显示字段: 学号,课程,最高成绩)
sqldf("select stuid, subject, max(score) as maxscore from stuscore group 
      by stuid")
# 列出各门课程成绩最好的学生(要求显示字段: 学号,科目,成绩)
sqldf("select stuid,  subject,max(score) as maxscore from stuscore group 
      by subject order by stuid")
# 列出各门课程成绩最差的学生(要求显示字段:学号,科目,成绩)
sqldf("select stuid,subject, min(score) as minscore from stuscore group by 
      subject order by stuid")

(5)创建一个列表,并使用melt函数将其融合。

data<-list(a=c(11,22,33,44),b=matrix(1:10,nrow=2),c="one,two,three",d=c(TRUE,FALSE))
data
library(reshape2)
melt(data, varnames = c("X", "Y"), value.name = "value", na.rm = FALSE)

(6)构建一个字符型向量,并使用sub函数和 gsub 函数完成字符串替换;使用paste
两数分别返回一个字符型向量和一个字符串。

#操作题(5)
data1<-c("we","are","family","you","good")
sub("good","bad",data1)
gsub("we","student",data1)

b<-paste("ab", 1:3, sep = "")  
x <- list(a = "st", b = "nd", c = "yw")
y <- list(d = 1, e = 2)
c<-paste(x, y, sep = "-", collapse = "; ")  # 设置collapse参数,连成一个字符串
c

第4章 函数与控制流

1.选择题

(1)下列能返回不小于x的最小整数的数学函数是(C)。
A.trunc
B.floor
C.ceiling
D.mad

(2)下列不属于apply函数使用对象的是(B)。
A.矩阵
B.向量
C.数组
D.数据框

(3)在ifelse(condition,statementl,statement2)语句中,当condition为TRUE时,执行的语句是(A)。
A.statementl
B.statement2
C.statement3
D.statement4

(4)在switch(expression,list)语句中,当list是有名定义、表达式等于变量名时,返回的结果是(B)。
A.列表相应位置的值
B.变量名对应的值
C.NULL”值
D.列表名

(5)下列不属于条件分支语句的数据分析的应用场景的是(B)。
A.if-else 语句
B.for循环语句
C.switch语句
D.ifelse语句

(6)下列关于cal(exprl,expr2…)函数表达不正确的是(A)。
A.exprl、expr2为需要输出的内容,必须为字符串
B.若exprl为“name”,则输出字符申“name
C.若exprl为变量name,则输出name的值
D.符号“ln”表示换行,表示“ln”后的语句在下一行输出

(7)能让while((i<=10){expr}语句停止循环的选项是(B)。
A.i == 10
B.i == 11
C.i == 5
D.i == 1

(8)使用自定义函数时可通过(A)调用。
A.source 函数
B.var 函数
C.range函数
D.signif函数

(9)函数体不包括(C)部分。
A.异常处理
B.返回值
C.输入值
D.运算过程

(10)下列选项中表示返回值的函数是(D)。
A.median
B.dnorm
C.source
D.retum

2.操作题

(1)使用apply函数族中的函数计算列表x<-list(a=1:5,b=exp(0:3))中的各子列表的最大值、最小值与中位数。

#操作题(1)
x <- list(a = 1:5, b = exp(0:3))
lapply(x, max)
lapply(x, min)
lapply(x, median)

(2)在区间[-5,5上绘制标准正态曲线,求位于z左侧的标准正态曲线下方的面积。

#操作题(2)
#在区间[-5,5]上绘制标准正态曲线
x <- pretty(c(-
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值