R语言实验三 下载本文

内容发布更新时间 : 2024/5/23 20:14:21星期一 下面是文章的全部内容请认真阅读。

实验3 R基础(三)

一、实验目的:

1. 掌握列表、数据框的相关运算; 2. 掌握R对数据文件的读写操作; 3. 掌握R的简单编程。

二、实验内容:

1. 完成教材例题; 2. 完成以下练习。

练习: 要求:①完成练习并粘贴运行截图到文档相应位置(截图方法见下),并将所有自己输入文字的字体颜色设为红色(包括后面的思考及小结),②回答思考题,③简要书写实验小结。④修改本文档名为“本人完整学号姓名1”,其中1表示第1次实验,以后更改为2,3,...。如文件名为“1305543109张立1”,表示学号为1305543109的张立同学的第1次实验,注意文件名中没有空格及任何其它字符。最后连同数据文件、源程序文件等(如果有的话),一起压缩打包发给课代表,压缩包的文件名同上。 截图方法:

法1:调整需要截图的窗口至合适的大小,并使该窗口为当前激活窗口(即该窗口在屏幕最前方),按住键盘Alt键(空格键两侧各有一个)不放,再按键盘右上角的截图键(通常印有“印屏幕”或“Pr Scrn”等字符),即完成截图。再粘贴到word文档的相应位置即可。 法2:利用QQ输入法的截屏工具。点击QQ输入法工具条最右边的“扳手”图标,选择其中的“截屏”工具。)

1. 自行完成教材P84页开始的2.6-2.9节中的例题。

2. 教材在讲解列表(List)时,所举例子的参数是有名参数。这里我们练习创建一个

列表,其参数是无名参数,并回答以下问题。

(1) 运行以下命令创建列表,注意每个元素的默认名称; L <- list(12,c(34,56),matrix(1:12,nrow=4),1:15,list(10,11))

(2) L[[2]][2]的输出结果是什么?请先自己写出结果,再运行验证;

[1] 56

(3) 用1:10替换L的第四个元素,请写出命令,并运行验证;

> L[[4]]<-c(1:10)

(4) 将L的第五个元素中的11替换为20,请写出命令,并运行验证。 > L[[5]][2]<- 20 运行结果截图

3. (习题2.4)生成一个5阶的Hilbert矩阵,

H?(hij)n?n,hij?(1) 计算Hilbert矩阵H的行列式; (2) 求H的逆矩阵;

(3) 求H的特征值和特征向量。

源代码:

>n<-5;H<-array(0,dim=c(n,n)) >for(i in 1:5){for(j in 1:5){ H[i,j]<-1/(i+j-1) } } >H >det(H) >solve(H) >eigen(H)

运行截图:

1,i, j=1,2,…,n

i?j?1

4. (习题2.5)已知有5名学生的数据,如下表所示。用数据框的形式读入数据。

学生数据

序号 姓名 性别 年龄 身高cm 体重kg 1 2 3 4 5

解:源代码:>df<-data.frame(

Name=c(\张三\李四\王五\赵六\丁一\Sex=c(\女\男\女\男\女\Age=c(14,15,16,14,15),

Height=c(156,165,157,162,159),

Weight=c(42.0,49.0,41.5,52.0,45.5));df 运行截图:

张三 李四 王五 赵六 丁一 女 男 女 男 女 14 15 16 14 15 156 165 157 162 159 42.0 49.0 41.5 52.0 45.5

5. (习题2.6)将上题中的数据表的中数据写成一个纯文本文件,用函数read.table()

读该文件,然后再用函数write.csv()写成一个Excel能打开的文件,并用Excel打开。 步骤:

(1) 复制上表数据到记事本,并以ex2.6.txt为文件名保存在合适的目录中; (2) 在read.tabel()中利用file.choose(),打开对话框来读取此文件; (3) 用函数write.csv()将此文件以ex2.6.cxv为文件名保存。

(4) 找到ex2.6.cxv,并打开它验证。文件默认存在什么地方?如何找到此文件?

如果想把此文件存放在D盘根目录下,如何修改代码?

源代码:

>df <-read.table(file.choose(),header=T) > df

> write.csv(df, file=“ex2.6.cxv”) > write.csv(df, file=“D:/ex2.6.cxv”) 运行截图:

R->改变工作目录->

6. (习题2.7)编写一个R程序(函数)。输入一个整数n,如果n≤0,则中止运算,

并输出一句话:“要求输入一个正整数”;否则,如果n是偶数,则将n除2,并赋给n;否则,将3n+1赋给n。不断循环,直到n=1,才停止计算,并输出一句话:“运算成功”。这个例子是为了检验数论中的一个简单的定理。

源代码:

Fun<-function(n){ if(n<=0)

list(fail=\要求输入一个正整数\ else {

repeat{ if(n==1) break

else if(n%%2==0){n<-n/2} else

n<-3*n+1 }

list(\运算成功\} }

运行截图:

思考:

1. 列表元素除了可以用“列表名[[下标]]”、“列表名[[\元素名\”这两种方式来引用

外,还有哪一种方式?

列表$元素名

2. 列表与数据框有什么异同点?

异:1)列表元素的类型可以任意类型,不同元素不必相同的类型,其中的元素经常是向量和列表本身,元素本身允许是其他类型,长度不要求相同;

2)数据框通常是矩阵形式结构,数据框每一列是一个变量,每一行是一个观测,各列表的成员必须是向量、因子、数值型矩阵、列表或其他数据框,数据框的变量必须要相同的长度(行数)。

同:数据框可以用data.frame()函数生成,其用法与列表list()函数相同

3. 对于列表、数据框的编辑,edit()函数与fix()函数有什么不同?

edit()函数进行编辑、修改后的数据并没有保存在原列表或数据框,而是存在新的