当前位置: 首页>编程语言>正文

trendline R语言 r语言readline

作者:圈圈

Getting Data In and Out of R

(一)读取数据

读取数据所需的几种函数:

read.table

  • 、 read.csv:最常用的读取列表数据函数,可返回数据框形式。

readLines

  • :逐行读取文本文件,返回一个字符向量

source

  • :读取R代码、脚本

dget

  • :读取R代码(读取的是以逆句法分析后以文本文件储存的R对象)

load

  • 、 unserialize:把二进制对象读入R
read.table()参数:

file

  • :文件名(字符串,即文件路径)

header

  • :逻辑标志,表明第一行是否有表头、行名(是变量名还是数据)

sep

  • :分隔符(字符串,表明每一列是怎么分隔的,可能是逗号、冒号、空格等)

colClasses

  • :字符向量(长度=数据集列数)说明数据集中每一列数据的类别

nrows

  • :数据集中数据的行数

comment.char

  • :字符串(用于表明文件中注释的字符)

skip

  • :指定文件(非数据区域)从上到下多少行可忽略

stringsAsFactors

  • :选择是否把文字变量编码为因子,默认为TRUE
将文件存至Rstudio识别的路径

read.table()函数中填写文件名之前,需要将文件存到正确的路径中

例如:

1. 
> ## 查看保存路径
1. 2. > getwd()
1. 2. [1] "d:/Program Files/RStudio"
1. 2. > ## 修改保存路径
1. 2. > setwd("E:/read data")
1. 2. > ## 读取文件
1. 2. > read.csv(data.csv, TRUE)
1. 2. >
1. 2. > ## 运行文件
1. 2. > data <- read.csv("data.csv", header = FALSE)
1. 2. > data

读取中小型数据集时

直接写文件名

读取大型数据集时

1. > data <- read.table("foo.txt")

你需要先清楚该数据占多大内存,如果不设置其他参数,R会默认将整个数据集都载入内存中。

  • 如果文件中没有注释行的话,那可以把 

comment.char

  •  设置为空,即 

comment.char=""colClasses

  • 如果所有列都是同一数据类型,可以直接统一设置 

colClasses=numeric

  • 如果所有列的数据类型不统一,可以通过设定 

nrow()

  • 参数,如下

(二)写入数据

1. initial <- read.table("datatable.txt", nrows = 100)          #先读前100行
1. 2. classes <- sapply (initial, class)                           #sapply()遍历每一列,调用class函数告诉你每一列的数据类型,然后将这些信息储存在classes中,
1. 2. tabALL <- read.table("datatable.txt", colClasses = classes)  #读取整个数据时,使用classes中的信息来指定colClasses)
与读取数据所用函数相对应的写入数据函数:

write.table

  • 、 

write.csvwriteLinesdumpdputsave

  • 、 

serialize

(三)输出函数

dump()dput()是两种重要的输出函数,用于储存格式和数据。它们可以包含更多元的数据,属于文本格式但是和表格形式有所不同。如果你对数据框使用 dump()dput() 函数,输出结果包括数据框每一列的数据类型,这样读取的是后就不用再次指定类别了。sourcedget函数可以读取未经 dump()dput() 输出的数据

dput()

dput() 可以生成一些代码,这些代码可用于重建R对象:

输出也可以直接保存到文件中,然后通过 dget() 读取:

1. > ## Create a data frame
1. 2. > y <- data.frame(a = 1, b = "a")  
1. 2. > ## Print 'dput' output to console
1. 2. > dput(y)                          
1. 2. structure(list(a = 1, b = structure(1L, .Label = "a", class = "factor")), .Names = c("a", 
1. 2. "b"), row.names = c(NA, -1L), class = "data.frame")

dump()

1. > ## Send 'dput' output to a file
1. 2. > dput(y, file = "y.R")            
1. 2. > ## Read in 'dput' output from a file
1. 2. > new.y <- dget("y.R")             
1. 2. > new.y
1. 2.   a b
1. 2. 1 1 a

dump()函数和 dget()类似,区别是后者只能对单一R对象使用,而 dump() 可作用于多个R对象,接受的是一个包含对象名字的字符向量

(四)与外部环境交互

1. > ##创建两个对象x和y
1. 2. > x <- "foo"
1. 2. > y <- data.frame(a = 1L, b = "a")
1. 2. > ## 传递dump参数,包含对象的名字,以及另一个文件名,即将这些对象储存在这个文件中
1. 2. > dump(c("x", "y"), file = "data.R") 
1. 2. > ##删除两个对象
1. 2. > rm(x, y)
1. 2. > ##对储存对象调用source函数
1. 2. > source("data.R")
1. 2. > ##重建x, y
1. 2. > str(y)
1. 2. 'data.frame':   1 obs. of  2 variables:
1. 2.  $ a: int 1
1. 2.  $ b: Factor w/ 1 level "a": 1
1. 2. > x
1. 2. [1] "foo"

R通过一些主要函数与外界交互,建立联系。

最常见的联系是与文件建立关联。如 file() 读取文本文件 、 gzfile()bzfile()读取压缩文件等。 url() 可用于与网页建立联系。

联系交互背后的思想是它提炼出与不同类型的R外部对象建立联系的机制。

file函数的几种参数

其中,description是文件名,open参数需要一个标识,包括r(读取,reading),w(写入,writing),a(附加,appending),rb、wb和ab分别表示读取、写入和附加二进制文件。

举例,查看名为"foo.txt"的csv.文件

1. > str(file)
1. 2. function (description = "", open = "", blocking = TRUE, encoding = getOption("encoding"), 
1. 2.     raw = FALSE, method = getOption("url.method", "default"))

以上三行命令和直接使用read.csv函数的效果一样,因此建立联系的必要性不大

1. > ## Create a connection to 'foo.txt'
1. 2. > con <- file("foo.txt")       
1. 2. > 
1. 2. > ## Open connection to 'foo.txt' in read-only mode
1. 2. > open(con, "r")               
1. 2. > 
1. 2. > ## Read from the connection
1. 2. > data <- read.csv(con)        
1. 2. > 
1. 2. > ## Close the connection
1. 2. > close(con)

但是当你只想读取文件的一部分的话,联系是有必要的。例如,建立联系后,使用readLines函数读取文件前10行:

1. > data <- read.csv("foo.txt")

读取网页数据

1. > ## Open connection to gz-compressed text file
1. 2. > con <- gzfile("words.gz")   
1. 2. > x <- readLines(con, 10) 
1. 2. > x
1. 2.  [1] "1080"     "10-point" "10th"     "11-point" "12-point" "16-point"
1. 2.  [7] "18-point" "1st"      "2"        "20-point"

首先使用 url() 函数与网页建立联系。然后通过readLines函数来读取文本。这是除了 read.table()read.csv()之外用来读取数据的另外一种方式。

1. > ## Open a URL connection for reading
1. 2. > con <- url("http://www.jhsph.edu", "r")  
1. 2. > 
1. 2. > ## Read the web page
1. 2. > x <- readLines(con)                      
1. 2. > 
1. 2. > ## Print out the first few lines
1. 2. > head(x)                                  
1. 2. [1] "<!DOCTYPE html>"                                               
1. 2. [2] "<html lang=\"en\">"                                            
1. 2. [3] ""                                                              
1. 2. [4] "<head>"                                                        
1. 2. [5] "<meta charset=\"utf-8\" />"                                    
1. 2. [6] "<title>Johns Hopkins Bloomberg School of Public Health</title>"

https://www.xamrdz.com/lan/5wy1967338.html

相关文章: