美文网首页
R--输入与输出

R--输入与输出

作者: KevinCool | 来源:发表于2016-03-21 22:15 被阅读1819次

    scan()函数

    #从文件读取或者从键盘输入一个向量,可以是数值型的也可以是字符型的
    #通过具名参数what=来控制,默认是数值型的
    scan("z2.txt")
    #输入字符串
    scan("z2.txt",what="")
    #scan()假定向量间是以空白字符间隔的,其他分隔符的话,使用sep参数
    #返回去除分隔符后的字符串向量,如果指定what为字符串的话
    scan("z2.txt",sep="\n")
    #这个是把每一行当成一个输入
    #从键盘输入字符数据
    scan("",what="")
    v <- scan("")```
    
    #readline()函数
    

    从键盘输入单行数据

    w <- readline()

    指定提示字符串

    inits <- readline("type your initials:")```

    print()函数

    #打印变量或者表达式的值,但是输出内容带编号
    print("abc")```
    
    #cat()函数
    

    在函数体内部打印变量或者表达式的值,print()

    但是print()只可以输出一个表达式,并且输出内容带编号

    cat()函数就解决了这个问题,比较合理的输出内容

    最好带上换行符,否则下次输出就会接着上次输出

    cat("abc\n")

    默认分隔符是空格,sep改变之

    cat("abc","love",sep="\n")
    cat("abc","love",sep="")

    sep设置为字符串向量

    x <- c(5,12,13,8,88,99)
    cat(x,sep=c(".",".",".","\n","\n"))```

    从文件中读取数据框或者矩阵

    #read.table()读取数据框
    #表示有表头的数据框读取
    z <- read.table("z",header = T)
    #读取矩阵
    #scan()按行读取,默认间隔是空格,默认读取类型是数字,按行读取,所以设定矩阵按行排列
    x <- matrix(scan("x"),nrow=5,byrow = T)
    #另外一种方式读取矩阵
    read.matrix <- function(filename){
      #先用read.table()读取为数据框,然后用as.matrix转换为矩阵
      as.matrix(read.table(filename))
    }```
    
    #读取文本文件
    

    文本文件主要由ASCII字符或者其他编码构成的文件

    二进制文件,非文本文件,如图像或者可执行程序文件

    使用readLines()读取文本文件

    一次性读取整个文件,每一行作为一个向量元素,返回字符串向量

    z1 <- readLines("z1")```

    连接

    #连接用于多种I/O操作的基本机制
    #使用file(),url()函数创建
    #mode r: open for reading in text mode
    c <- file("z1","r")
    #n=1使得程序只读取文件的一行
    #当读到文件结束符EOF的时候,返回一个空值
    readlines(c,n=1)```
    
    #检测代码中的文件结束符
    

    c <- file("z","r")
    while(T)
    {
    r1 <- readLines(c,n=1)
    if(length(r1)==0){
    print("reached the end")
    break
    }else print(r1)
    }```

    改变文件指针,seek()

    c <- file("z1","r")
    readLines(c,n=2)
    #where=0 表示希望把起始指针指向文件的最开头
    seek(con = c,where=0)
    
    #close()函数来关闭连接,使得系统将读取数据正式的写入磁盘```
    
    #读取PUMS普查数据
    

    extracts an integer field in the string s, in character positions

    rng[1] through rng[2]

    传入的rng是一个向量

    将字符串读取为数字

    intextract <- function(s,rng){

    子字符串,start,stop

    fld <- substr(s,rng[1],rng[2])
    return(as.integer(fld))
    }

    extractpums <- function(pf,flds){
    dtf <- data.frame()
    con <- file(pf,"r")

    process the input file

    repeat{
    hrec <- readlines(con,1)
    #end of the file, leave loop
    if(length(hrec)==0) break
    #get hosehold serial number
    serno <- intextract(hrec,c(2,8))
    #how many person records?
    npr <- intextract(hrec,c(106,107))
    if(npr>0)
    for(i in 1:npr){
    #get person record
    prec <-readlines(con,1)
    #make this person's row for the data frame
    person <- makerow(serno,prec,flds)
    #add it to the data frame
    dtf <- rbind(dtf,person)
    }
    }
    }

    set up this person's row for the data frame

    fl表示变量名和列范围组成的列表

    makerow <- function(srn,pr,fl){
    l <- list()
    l[["serno"]] <- srn
    for(nm in names(fl)){
    #传入的是个人记录字符串和列范围
    l[[nm]] <- intextract(pr,fl[[nm]])
    }
    return(l)
    }

    调用示例

    pumsdf <- extractpums("pumsa",list(Gender=c(23,23),Age=c(25,26)))```

    写文件

    #write.table()函数,将数据框写入文件
    kids <- c("jack","jill")
    ages <- c(28,29)
    d <- data.frame(kids,ages,stringsAsFactors = F)
    write.table(d,"kds")
    #将矩阵写入文件,声明不要列名和行名
    write.table(xc,"xcnew",row.names = F,col.names = F)
    #cat()函数也可以用来写文件
    cat("abc\n",file="u")
    cat("de\n",file="u",append = T)
    #也可以写多个字段
    cat(file = "u",1,2,3,"i love you \n",append = T)
    #还可以使用writeLines()函数,如果使用连接必须设定w参数
    con <- file("www","w")
    #写入的向量默认将以换行符分隔
    writeLines(c("abc","de","f"),con,sep = " ")
    #必须手动关闭文件连接
    close(con)```
    
    #获取文件和目录信息
    

    file.info("www")

    参数是表示文件名称的字符串向量,给出文件的信息

    dir()
    dir(pattern="txt",ignore.cases=T)

    返回一个字符向量,列出在第一个参数指定的目录下的所有文件

    recursive=T将目录树显示出来

    file.exists()

    判断是否存在该文件名

    getwd()
    setwd()

    用于确定或者改变当前工作目录```

    相关文章

      网友评论

          本文标题:R--输入与输出

          本文链接:https://www.haomeiwen.com/subject/ipnklttx.html