R语言数据输入输出



数据的输入输出,包括计算机系统中R语言的键盘输入和显示器输出,程序的数据输入和执行结果输出。

2.7.1  R语言的输入和输出

所谓用户、程序员和计算机交互又称为人机交互,请注意人机交互并不代表科学实验。在R语言中称为开始一个会话,与网络中开始的会话section相同。R语言的命令在命令行>中输入,而且与UNIX系统的shell批处理命令程序类似,R语言可将多个命令集合在一起构成一个脚本文件,然而问题是该脚本文件的输出在哪里?R语言命令脚本文件的输出可在显示器,也可定向输出到一个文件中。

1. R语言的输入

   R语言系统的输入可以是命令,R语言解释器的输入则是命令程序。命令集的脚本文件可保存为.R文件,再用source()命令完成批处理。

>source(Rlcommand.R)   #执行一个脚本文件

然而source()函数的另一个功能是编译一个R语言程序或者函数。例如,函数funfactor()保存在funfactor.R文件中,则编译并且调用函数funfactor()的方法,

>source(funfactor.R)   #编译funfactor.R文件

>saladrink=funfactor(dafr,salary,levels)  #调用函数funfactor()

    R语言程序在编辑窗口输入,可用edit()命令。或者用R语言系统菜单创建一个.R文件再保存。

2.R语言的输出

若将R语言系统的输出重定向到文本文件resultgrep中,则使用sink()命令。

>sink(resultgrep)  

R语言命令的输出将在resultgrep文件中看到。可不再让解释器把每一条输出到显示器上。

若重定向图形输出,例如plot()的输出,可保存在图形文件中。根据图形的属性,选择命令执行。最后将图形重定向恢复设置为显示器输出。windows图元文件和.bmp文件分别是,

>win.metafile("ts1.wmf")   #将图形重定向到ts1.wmf文件中

>bmp("ts1.bmp")          #将图形保存到ts1.bmp文件,.bmp文件分辨率更高

>dev.off()               #输出返回到显示器

2.7.2程序的数据输入和输出

R语言作为开源软件,它的优势是共享和方便用户,它的不利是不正式和不能形成行业。但是,R语言的数据源开放了世界无数的窗口,使有用的数据流动在我们的周围。R语言的数据源,不仅仅是程序员诚实地在键盘上输入得到的,R语言能导入.txt文件、execl文件、流行的商业统计软件SAS,SPSS,Stata文件,数据库的信息和网络上的数据。

1.程序读取键盘输入

    只有少量数据,用函数scan()readline()接收数据。函数scan()从键盘接收输入并且输出向量,将文件名设置为空,并且接收到空行则表示键盘输入结束。scan()的安静模式可用quiet=TRUE设置。scan()只接收数值和单字符的输入,而readline()接收字符串。

>dv1=scan("")

1: 1 2 3 4 5

6:

>dv1

[1] 1 2 3 4 5

>dv2=scan("")

1: a

2: b

3: c

4:

>dv2

[1]

readline()有两种用途。一个是用readline()方式接收输入一行字符串,保存在字符串向量中。一个是readline("提示内容"),根据提示输入答案。例如,在键盘输入"I hope we go to university together ,but now war is dealed with,please wait for victory."并且保存到向量dv3中。

>dv3=readline()

I hope we go to university together ,but now war is dealed with,please wait for victory.

>dv3

##[1] I hope we go to university together ,but now war is dealed with,please wait for victory.

> dv4=readline("There is your in fact.")  #根据提示"There is your in fact."输入回答

There is your in fact.Yes.  #Yes是回答(实际情况)

> dv4

[1] "Yes." 
2.读取windows文件

    scan("filename.txt")快速读取.txt文件到一个向量,若是包括字符的文件,则参数what=""

>dv5=scan(file1.txt,what="")

Read 5 items.

[1] "1" "2" "3" "quiet" "study" 
    windows.txt文件内容是数据框,则用函数read.table()读取。若数据分析员从事分析execl文件的工作,则可用read.xlsx()读取.xlsx文件,read.xls()读取.xls文件csv格式文件可用read.csv()读取。readLines()可在文本文件中读取多行数据或者整个文件。.txt文件是空格分隔符,.csv文件是“;”分隔符。

函数read.table()的参数file设定了文件路径,header设置表头sep设定列间隔方式。输出数据data.framestringsAsFactors=FALSE设置所有的字符保存为字符串类型默认则是因子factor

读取.xlsx文件,应安装软件包xls,rJavarJava软件包必须设置java环境。在系统中设置环境变量pathjavapath等。read.xlsx()应注意sheet参数的设置。

>file1="D:/travers/dog.xlsx"

>datafr1=read.xlsx(file1,1)  #sheet=1  

     批量读取文件的方法应该先将批量读取文件存放在固定目录下。用dir()函数获取目录中的文件名,然后用paste()合成路径,最后处理文档。对批量文件可用循环或apply族函数处理。例如:

>doc.names =dir("path")

>doc.path =sapply(doc.names,function(names)  paste(path,names,sep='/'))

                    #合成文件路径名

>doc =sapply(doc.path,function(doc)  readLines(doc))

3.导入统计软件数据

(1) SPSS数据

    SPSS统计软件的.sav文件用函数read.spss()读取,保存在数据框中read.spss()所在软件包foreign或者使用Hmisc软件包的函数spss.get()。函数spss.get()封装read. spss(),设置参数,最后得到数据分析人员期望的结果。

>library(Hmisc)  

>daf=spss.get("data2076.sav",use.value.labels=TRUE)  #读取.sav文件

use.value.labels=TRUE表示将标签的变量保存为因子,而且水平相同。

(2)导入SAS数据

foreignread.ssd()Hmisc包中的sas.get()可读取注意SAS的较新版本(SAS 9.1或更高版本)可能导致函数并不能正常使用。保存为Transport format(XPORT)文件可用foreign函数read.xport()取。

4.www网站读取数据

(1) read.csv()读取数据集

    为保证例题的正确性,选择《R语言编程艺术》P208页上的例题。函数paste()下载美国加州大学欧文分校的Echocardiogram数据集,保存为.csv文件。

>urluci="http://archive.ics.uci.edu/ml/machine-learning-databases/"

>databasefile=paste(urluci,"echocardiogram/echocardiogram.data",sep=" ")

                  #paste()合成文件名

>dataframe1=read.csv(databasefile)  #读取网络文件数据集

(2) read.table()读入数据文件

     read.table 函数用url地址表示文件,格式非常简单。

> addr=http://www.abcd.com/de.txt

> read.table(file=url(addr))

(3)从网页抓取数据

网页数据有不同格式,可用不同函数读取。readLines()读取文本,readHTMLTable()读取所有表格。 Web数据抓取(Webscraping)过程中,用户从互联网上提取嵌入在网页中的信息,并保存为R语言列表list一个方法是使用函数readLines()下载网页,再用grep()过滤信息gsub()函数处理。readLines()按行读取文本文件,一些非结构化的文本文件,例如电子邮件数据或微博数据,也可使用readLines()web文件可用单引号,用n=行数表示读取的范围。例如,希望读取哈佛大学html主页前十行的数据,方法见下,

> urlnetaddr='http://www.harvard.edu/'   #哈佛大学网址

> dlisa1=readLines(urlnetaddr,n=50)

> dlisa1

>names(disa1)  #数据标签

    另一种途径的方法是RCurl包和XML包来提取结构复杂的网页的信息。 此外,scan()也有丰富的参数用来读取非结构化文档。抓取网页上的表格,可使用XML包的readHTMLTable()函数函数readHTMLTable()读取XML数据。  

>head(dlisa1[[2]])   #dlisa1是列表

   读取《计算机学报》PDF文件http://cjc.ict.ac.cn/online/onlinepaper/cjj-2016823101705.pdf不能使用readLines(),请读者自己思考方法。

4.写文件
    保存程序的临时数据到tmp.txt文件,或者将结果保存到result1.xlsx文件,可用函数write.table()write.csv(),并且可写表格型数据文件。cat()函数也能输出文件。

    另外MySQL数据库交换数据可使用RMySLQ软件包。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值